# This file was auto-generated by Fern from our API Definition.

import typing_extensions
import typing_extensions
from .catalog_query_sorted_attribute import CatalogQuerySortedAttributeParams
from .catalog_query_exact import CatalogQueryExactParams
from .catalog_query_set import CatalogQuerySetParams
from .catalog_query_prefix import CatalogQueryPrefixParams
from .catalog_query_range import CatalogQueryRangeParams
from .catalog_query_text import CatalogQueryTextParams
from .catalog_query_items_for_tax import CatalogQueryItemsForTaxParams
from .catalog_query_items_for_modifier_list import CatalogQueryItemsForModifierListParams
from .catalog_query_items_for_item_options import CatalogQueryItemsForItemOptionsParams
from .catalog_query_item_variations_for_item_option_values import CatalogQueryItemVariationsForItemOptionValuesParams


class CatalogQueryParams(typing_extensions.TypedDict):
    """
    A query composed of one or more different types of filters to narrow the scope of targeted objects when calling the `SearchCatalogObjects` endpoint.

    Although a query can have multiple filters, only certain query types can be combined per call to [SearchCatalogObjects](api-endpoint:Catalog-SearchCatalogObjects).
    Any combination of the following types may be used together:
    - [exact_query](entity:CatalogQueryExact)
    - [prefix_query](entity:CatalogQueryPrefix)
    - [range_query](entity:CatalogQueryRange)
    - [sorted_attribute_query](entity:CatalogQuerySortedAttribute)
    - [text_query](entity:CatalogQueryText)

    All other query types cannot be combined with any others.

    When a query filter is based on an attribute, the attribute must be searchable.
    Searchable attributes are listed as follows, along their parent types that can be searched for with applicable query filters.

    Searchable attribute and objects queryable by searchable attributes:
    - `name`:  `CatalogItem`, `CatalogItemVariation`, `CatalogCategory`, `CatalogTax`, `CatalogDiscount`, `CatalogModifier`, `CatalogModifierList`, `CatalogItemOption`, `CatalogItemOptionValue`
    - `description`: `CatalogItem`, `CatalogItemOptionValue`
    - `abbreviation`: `CatalogItem`
    - `upc`: `CatalogItemVariation`
    - `sku`: `CatalogItemVariation`
    - `caption`: `CatalogImage`
    - `display_name`: `CatalogItemOption`

    For example, to search for [CatalogItem](entity:CatalogItem) objects by searchable attributes, you can use
    the `"name"`, `"description"`, or `"abbreviation"` attribute in an applicable query filter.
    """

    sorted_attribute_query: typing_extensions.NotRequired[CatalogQuerySortedAttributeParams]
    """
    A query expression to sort returned query result by the given attribute.
    """

    exact_query: typing_extensions.NotRequired[CatalogQueryExactParams]
    """
    An exact query expression to return objects with attribute name and value
    matching the specified attribute name and value exactly. Value matching is case insensitive.
    """

    set_query: typing_extensions.NotRequired[CatalogQuerySetParams]
    """
    A set query expression to return objects with attribute name and value
    matching the specified attribute name and any of the specified attribute values exactly.
    Value matching is case insensitive.
    """

    prefix_query: typing_extensions.NotRequired[CatalogQueryPrefixParams]
    """
    A prefix query expression to return objects with attribute values
    that have a prefix matching the specified string value. Value matching is case insensitive.
    """

    range_query: typing_extensions.NotRequired[CatalogQueryRangeParams]
    """
    A range query expression to return objects with numeric values
    that lie in the specified range.
    """

    text_query: typing_extensions.NotRequired[CatalogQueryTextParams]
    """
    A text query expression to return objects whose searchable attributes contain all of the given
    keywords, irrespective of their order. For example, if a `CatalogItem` contains custom attribute values of
    `{"name": "t-shirt"}` and `{"description": "Small, Purple"}`, the query filter of `{"keywords": ["shirt", "sma", "purp"]}`
    returns this item.
    """

    items_for_tax_query: typing_extensions.NotRequired[CatalogQueryItemsForTaxParams]
    """
    A query expression to return items that have any of the specified taxes (as identified by the corresponding `CatalogTax` object IDs) enabled.
    """

    items_for_modifier_list_query: typing_extensions.NotRequired[CatalogQueryItemsForModifierListParams]
    """
    A query expression to return items that have any of the given modifier list (as identified by the corresponding `CatalogModifierList`s IDs) enabled.
    """

    items_for_item_options_query: typing_extensions.NotRequired[CatalogQueryItemsForItemOptionsParams]
    """
    A query expression to return items that contains the specified item options (as identified the corresponding `CatalogItemOption` IDs).
    """

    item_variations_for_item_option_values_query: typing_extensions.NotRequired[
        CatalogQueryItemVariationsForItemOptionValuesParams
    ]
    """
    A query expression to return item variations (of the [CatalogItemVariation](entity:CatalogItemVariation) type) that
    contain all of the specified `CatalogItemOption` IDs.
    """
