# Represents the location where the physical good resides.
type Location implements HasMetafieldDefinitions&HasMetafields&LegacyInteroperability&Node {
    # Whether this location can be reactivated.
    activatable: Boolean!

    # The address of this location.
    address: LocationAddress!

    # Whether the location address has been verified.
    addressVerified: Boolean!

    # Whether this location can be deactivated.
    deactivatable: Boolean!

    # The date and time (ISO 8601 format) that the location was deactivated at.
    # For example, 3:30 pm on September 7, 2019 in the time zone of UTC (Universal Time Coordinated) is represented as "2019-09-07T15:50:00Z".
    deactivatedAt: String

    # Whether this location can be deleted.
    deletable: Boolean!

    # Name of the service provider that fulfills from this location.
    fulfillmentService: FulfillmentService

    # Whether this location can fulfill online orders.
    fulfillsOnlineOrders: Boolean!

    # Whether this location has active inventory.
    hasActiveInventory: Boolean!

    # Whether this location has orders that need to be fulfilled.
    hasUnfulfilledOrders: Boolean!

    # A globally-unique identifier.
    id: ID!

    # The quantities of an inventory item at this location.
    inventoryLevel(inventoryItemId: ID!): InventoryLevel

    # A list of the quantities of the inventory items that can be stocked at this location.
    inventoryLevels(
        first: Int
        after: String
        last: Int
        before: String
        reverse: Boolean = false
        query: String
    ): InventoryLevelConnection!

    # Whether the location is active.
    isActive: Boolean!

    # The ID of the corresponding resource in the REST Admin API.
    legacyResourceId: UnsignedInt64!

    # Returns a metafield by namespace and key that belongs to the resource.
    metafield(namespace: String!key: String!): Metafield

    # List of metafield definitions.
    metafieldDefinitions(
        namespace: String
        pinnedStatus: MetafieldDefinitionPinnedStatus = ANY
        first: Int
        after: String
        last: Int
        before: String
        reverse: Boolean = false
        sortKey: MetafieldDefinitionSortKeys = ID
        query: String
    ): MetafieldDefinitionConnection!

    # List of metafields that belong to the resource.
    metafields(
        namespace: String
        first: Int
        after: String
        last: Int
        before: String
        reverse: Boolean = false
    ): MetafieldConnection!

    # The name of the location.
    name: String!

    # Returns a private metafield by namespace and key that belongs to the resource.
    privateMetafield(namespace: String!key: String!): PrivateMetafield

    # List of private metafields that belong to the resource.
    privateMetafields(
        namespace: String
        first: Int
        after: String
        last: Int
        before: String
        reverse: Boolean = false
    ): PrivateMetafieldConnection!

    # Whether this location is used for calculating shipping rates. In multi-origin shipping mode, this flag is ignored.
    shipsInventory: Boolean!

    # List of suggested addresses for this location (empty if none).
    suggestedAddresses: [LocationSuggestedAddress!]!
}

# Represents a suggested address for a location.
type LocationSuggestedAddress {
    # The first line of the suggested address.
    address1: String

    # The second line of the suggested address.
    address2: String

    # The city of the suggested address.
    city: String

    # The country of the suggested address.
    country: String

    # The country code of the suggested address.
    countryCode: CountryCode

    # A formatted version of the suggested address.
    formatted: [String!]!

    # The province of the suggested address.
    province: String

    # The code for the province, state, or district of the suggested address.
    provinceCode: String

    # The ZIP code of the suggested address.
    zip: String
}

# Represents the address of a location.
type LocationAddress {
    # The first line of the address for the location.
    address1: String

    # The second line of the address for the location.
    address2: String

    # The city of the location.
    city: String

    # The country of the location.
    country: String

    # The country code of the location.
    countryCode: String

    # A formatted version of the address for the location.
    formatted: [String!]!

    # The latitude coordinates of the location.
    latitude: Float

    # The longitude coordinates of the location.
    longitude: Float

    # The phone number of the location.
    phone: String

    # The province of the location.
    province: String

    # The code for the province, state, or district of the address of the location.
    provinceCode: String

    # The ZIP code of the location.
    zip: String
}

# The country-specific harmonized system code and ISO country code for an inventory item.
type CountryHarmonizedSystemCode {
    # The ISO 3166-1 alpha-2 country code for the country that issued the specified harmonized system code.
    countryCode: CountryCode!

    # The country-specific harmonized system code. These are usually longer than 6 digits.
    harmonizedSystemCode: String!
}

# An auto-generated type for paginating through multiple Locations.
type LocationConnection {
    # A list of edges.
    edges: [LocationEdge!]!

    # A list of the nodes contained in LocationEdge.
    nodes: [Location!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one Location and a cursor during pagination.
type LocationEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of LocationEdge.
    node: Location!
}

# An auto-generated type for paginating through multiple CountryHarmonizedSystemCodes.
type CountryHarmonizedSystemCodeConnection {
    # A list of edges.
    edges: [CountryHarmonizedSystemCodeEdge!]!

    # A list of the nodes contained in CountryHarmonizedSystemCodeEdge.
    nodes: [CountryHarmonizedSystemCode!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one CountryHarmonizedSystemCode and a cursor during pagination.
type CountryHarmonizedSystemCodeEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of CountryHarmonizedSystemCodeEdge.
    node: CountryHarmonizedSystemCode!
}

# An auto-generated type for paginating through multiple MarketRegions.
type MarketRegionConnection {
    # A list of edges.
    edges: [MarketRegionEdge!]!

    # A list of the nodes contained in MarketRegionEdge.
    nodes: [MarketRegion!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one MarketRegion and a cursor during pagination.
type MarketRegionEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of MarketRegionEdge.
    node: MarketRegion!
}
