type Query {
    productOptionGroups(options: ProductOptionGroupListOptions): ProductOptionGroupList!
    productOptionGroup(id: ID!): ProductOptionGroup
    productOptions(options: ProductOptionListOptions, groupId: ID): ProductOptionList!
    productOption(id: ID!): ProductOption
}

type Mutation {
    "Create a new ProductOptionGroup"
    createProductOptionGroup(input: CreateProductOptionGroupInput!): ProductOptionGroup!
    "Update an existing ProductOptionGroup"
    updateProductOptionGroup(input: UpdateProductOptionGroupInput!): ProductOptionGroup!
    "Delete a ProductOptionGroup"
    deleteProductOptionGroup(id: ID!, force: Boolean): DeletionResponse!
    "Delete multiple ProductOptionGroups"
    deleteProductOptionGroups(ids: [ID!]!, force: Boolean): [DeletionResponse!]!
    "Create a new ProductOption within a ProductOptionGroup"
    createProductOption(input: CreateProductOptionInput!): ProductOption!
    "Create a new ProductOption within a ProductOptionGroup"
    updateProductOption(input: UpdateProductOptionInput!): ProductOption!
    "Delete a ProductOption"
    deleteProductOption(id: ID!): DeletionResponse!
    "Assigns ProductOptionGroups to the specified Channel"
    assignProductOptionGroupsToChannel(input: AssignProductOptionGroupsToChannelInput!): [ProductOptionGroup!]!
    "Removes ProductOptionGroups from the specified Channel"
    removeProductOptionGroupsFromChannel(input: RemoveProductOptionGroupsFromChannelInput!): [RemoveProductOptionGroupFromChannelResult!]!
}

# generated by generateListOptions function
input ProductOptionGroupListOptions

input ProductOptionListOptions

type ProductOptionGroupList implements PaginatedList {
    totalItems: Int!
    items: [ProductOptionGroup!]!
}

type ProductOptionList implements PaginatedList {
    totalItems: Int!
    items: [ProductOption!]!
}

input ProductOptionGroupTranslationInput {
    id: ID
    languageCode: LanguageCode!
    name: String
}

input CreateProductOptionGroupInput {
    code: String!
    translations: [ProductOptionGroupTranslationInput!]!
    options: [CreateGroupOptionInput!]
}

input UpdateProductOptionGroupInput {
    id: ID!
    code: String
    translations: [ProductOptionGroupTranslationInput!]
}

input ProductOptionTranslationInput {
    id: ID
    languageCode: LanguageCode!
    name: String
}

input CreateGroupOptionInput {
    code: String!
    translations: [ProductOptionGroupTranslationInput!]!
}

input CreateProductOptionInput {
    productOptionGroupId: ID!
    code: String!
    translations: [ProductOptionGroupTranslationInput!]!
}

input UpdateProductOptionInput {
    id: ID!
    code: String
    translations: [ProductOptionGroupTranslationInput!]
}

input AssignProductOptionGroupsToChannelInput {
    productOptionGroupIds: [ID!]!
    channelId: ID!
}

input RemoveProductOptionGroupsFromChannelInput {
    productOptionGroupIds: [ID!]!
    channelId: ID!
    force: Boolean
}

type ProductOptionGroupInUseError implements ErrorResult {
    errorCode: ErrorCode!
    message: String!
    optionGroupCode: String!
    productCount: Int!
    variantCount: Int!
}

union RemoveProductOptionGroupFromChannelResult = ProductOptionGroup | ProductOptionGroupInUseError
