# Generated by ariadne-codegen
# Source: https://dev-orlade-marqo.myshopify.com/admin/api/2024-10/graphql.json

from typing import Any, List, Optional

from .base_model import BaseModel
from .enums import (
    CollectionRuleColumn,
    CollectionRuleRelation,
    CollectionSortOrder,
    CombinedListingsRole,
    CountryCode,
    MediaContentType,
    ProductStatus,
    ProductVariantInventoryPolicy,
    WeightUnit,
)


class CollectionDeleteInput(BaseModel):
    id: str


class CollectionInput(BaseModel):
    descriptionHtml: Optional[str] = None
    handle: Optional[str] = None
    id: Optional[str] = None
    image: Optional["ImageInput"] = None
    products: Optional[List[str]] = None
    ruleSet: Optional["CollectionRuleSetInput"] = None
    templateSuffix: Optional[str] = None
    sortOrder: Optional[CollectionSortOrder] = None
    title: Optional[str] = None
    metafields: Optional[List["MetafieldInput"]] = None
    seo: Optional["SEOInput"] = None
    redirectNewHandle: Optional[bool] = None


class CollectionRuleInput(BaseModel):
    column: CollectionRuleColumn
    relation: CollectionRuleRelation
    condition: str
    conditionObjectId: Optional[str] = None


class CollectionRuleSetInput(BaseModel):
    appliedDisjunctively: bool
    rules: Optional[List["CollectionRuleInput"]] = None


class CountryHarmonizedSystemCodeInput(BaseModel):
    harmonizedSystemCode: str
    countryCode: CountryCode


class CreateMediaInput(BaseModel):
    originalSource: str
    alt: Optional[str] = None
    mediaContentType: MediaContentType


class ImageInput(BaseModel):
    id: Optional[str] = None
    altText: Optional[str] = None
    src: Optional[str] = None


class InventoryItemInput(BaseModel):
    sku: Optional[str] = None
    cost: Optional[Any] = None
    tracked: Optional[bool] = None
    countryCodeOfOrigin: Optional[CountryCode] = None
    harmonizedSystemCode: Optional[str] = None
    countryHarmonizedSystemCodes: Optional[List["CountryHarmonizedSystemCodeInput"]] = (
        None
    )
    provinceCodeOfOrigin: Optional[str] = None
    measurement: Optional["InventoryItemMeasurementInput"] = None
    requiresShipping: Optional[bool] = None


class InventoryItemMeasurementInput(BaseModel):
    weight: Optional["WeightInput"] = None


class InventoryLevelInput(BaseModel):
    availableQuantity: int
    locationId: str


class LinkedMetafieldCreateInput(BaseModel):
    namespace: str
    key: str
    values: Optional[List[str]] = None


class MetafieldInput(BaseModel):
    id: Optional[str] = None
    namespace: Optional[str] = None
    key: Optional[str] = None
    value: Optional[str] = None
    type: Optional[str] = None


class MetafieldsSetInput(BaseModel):
    ownerId: str
    namespace: Optional[str] = None
    key: str
    value: str
    compareDigest: Optional[str] = None
    type: Optional[str] = None


class OptionCreateInput(BaseModel):
    name: Optional[str] = None
    position: Optional[int] = None
    values: Optional[List["OptionValueCreateInput"]] = None
    linkedMetafield: Optional["LinkedMetafieldCreateInput"] = None


class OptionValueCreateInput(BaseModel):
    name: Optional[str] = None
    linkedMetafieldValue: Optional[str] = None


class ProductClaimOwnershipInput(BaseModel):
    bundles: Optional[bool] = None


class ProductCreateInput(BaseModel):
    descriptionHtml: Optional[str] = None
    handle: Optional[str] = None
    seo: Optional["SEOInput"] = None
    productType: Optional[str] = None
    category: Optional[str] = None
    tags: Optional[List[str]] = None
    templateSuffix: Optional[str] = None
    giftCardTemplateSuffix: Optional[str] = None
    title: Optional[str] = None
    vendor: Optional[str] = None
    giftCard: Optional[bool] = None
    collectionsToJoin: Optional[List[str]] = None
    combinedListingRole: Optional[CombinedListingsRole] = None
    metafields: Optional[List["MetafieldInput"]] = None
    productOptions: Optional[List["OptionCreateInput"]] = None
    status: Optional[ProductStatus] = None
    requiresSellingPlan: Optional[bool] = None
    claimOwnership: Optional["ProductClaimOwnershipInput"] = None


class ProductDeleteInput(BaseModel):
    id: str


class ProductUpdateInput(BaseModel):
    descriptionHtml: Optional[str] = None
    handle: Optional[str] = None
    seo: Optional["SEOInput"] = None
    productType: Optional[str] = None
    category: Optional[str] = None
    tags: Optional[List[str]] = None
    templateSuffix: Optional[str] = None
    giftCardTemplateSuffix: Optional[str] = None
    title: Optional[str] = None
    vendor: Optional[str] = None
    redirectNewHandle: Optional[bool] = None
    id: Optional[str] = None
    collectionsToJoin: Optional[List[str]] = None
    collectionsToLeave: Optional[List[str]] = None
    metafields: Optional[List["MetafieldInput"]] = None
    status: Optional[ProductStatus] = None
    requiresSellingPlan: Optional[bool] = None


class ProductVariantsBulkInput(BaseModel):
    barcode: Optional[str] = None
    compareAtPrice: Optional[Any] = None
    id: Optional[str] = None
    mediaSrc: Optional[List[str]] = None
    inventoryPolicy: Optional[ProductVariantInventoryPolicy] = None
    inventoryQuantities: Optional[List["InventoryLevelInput"]] = None
    inventoryItem: Optional["InventoryItemInput"] = None
    mediaId: Optional[str] = None
    metafields: Optional[List["MetafieldInput"]] = None
    optionValues: Optional[List["VariantOptionValueInput"]] = None
    price: Optional[Any] = None
    taxable: Optional[bool] = None
    taxCode: Optional[str] = None
    requiresComponents: Optional[bool] = None


class SEOInput(BaseModel):
    title: Optional[str] = None
    description: Optional[str] = None


class VariantOptionValueInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    linkedMetafieldValue: Optional[str] = None
    optionId: Optional[str] = None
    optionName: Optional[str] = None


class WeightInput(BaseModel):
    value: float
    unit: WeightUnit


CollectionInput.model_rebuild()
CollectionRuleSetInput.model_rebuild()
InventoryItemInput.model_rebuild()
InventoryItemMeasurementInput.model_rebuild()
OptionCreateInput.model_rebuild()
ProductCreateInput.model_rebuild()
ProductUpdateInput.model_rebuild()
ProductVariantsBulkInput.model_rebuild()
