type Product implements Node {
    id: ID!
    createdAt: DateTime!
    updatedAt: DateTime!
    languageCode: LanguageCode!
    name: String!
    slug: String!
    description: String!
    featuredAsset: Asset
    assets: [Asset!]!
    variants: [ProductVariant!]!
    optionGroups: [ProductOptionGroup!]!
    facetValues: [FacetValue!]!
    translations: [ProductTranslation!]!
    collections: [Collection!]!
}

type ProductTranslation {
    id: ID!
    createdAt: DateTime!
    updatedAt: DateTime!
    languageCode: LanguageCode!
    name: String!
    slug: String!
    description: String!
}

type ProductList implements PaginatedList {
    items: [Product!]!
    totalItems: Int!
}

type ProductVariant implements Node {
    id: ID!
    productId: ID!
    createdAt: DateTime!
    updatedAt: DateTime!
    languageCode: LanguageCode!
    sku: String!
    name: String!
    featuredAsset: Asset
    assets: [Asset!]!
    price: Int!
    currencyCode: CurrencyCode!
    priceIncludesTax: Boolean!
    priceWithTax: Int!
    taxRateApplied: TaxRate!
    taxCategory: TaxCategory!
    options: [ProductOption!]!
    facetValues: [FacetValue!]!
    translations: [ProductVariantTranslation!]!
}

type ProductVariantTranslation {
    id: ID!
    createdAt: DateTime!
    updatedAt: DateTime!
    languageCode: LanguageCode!
    name: String!
}
