# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from __future__ import annotations

import datetime
from typing import Union
from typing_extensions import Literal, Annotated, TypedDict

from ...._utils import PropertyInfo

__all__ = ["ShowListParams"]


class ShowListParams(TypedDict, total=False):
    id: str
    """
    A single id or comma separated list of IDs. Be sure to sort ids ASC to improve
    cache efficiency.
    """

    are_access_programs_active: Annotated[bool, PropertyInfo(alias="areAccessProgramsActive")]
    """
    If true, return only shows that have Lottery or Rush active - not necessarily
    available
    """

    are_regular_tickets_available: Annotated[bool, PropertyInfo(alias="areRegularTicketsAvailable")]
    """Include show summaries for shows where regular Tickets are available, if true"""

    categories: str
    """Categories to filter shows by.

    A show must have one of the provided categories to appear in the results.
    """

    date: Annotated[Union[str, datetime.date], PropertyInfo(format="iso8601")]
    """Date or list of dates to filter showtimes by formatted as yyyy-MM-dd.

    It could also be two specific strings, TODAY or THIS_WEEKEND.
    """

    date_from: Annotated[object, PropertyInfo(alias="dateFrom")]
    """Start date for a date range to filter showtimes by formatted as yyyy-MM-dd.

    It could also be used independently without a dateTo, in that case the results
    will include showtimes with a date greater or equal than dateFrom.
    """

    date_to: Annotated[object, PropertyInfo(alias="dateTo")]
    """End date for a date range to filter showtimes by formatted as yyyy-MM-dd.

    It could also be used independently without a dateFrom, in that case the results
    will include showtimes with a date lower or equal than dateTo.
    """

    day_part: Annotated[Literal["MATINEE", "EVENING"], PropertyInfo(alias="dayPart")]
    """Return only shows that have available tickets for a specific day part.

    Can be either EVENING or MATINEE
    """

    end_date_from: Annotated[object, PropertyInfo(alias="endDateFrom")]
    """
    First date for a date range to filter products by endDate - formatted as
    yyyy-MM-dd. If an endDateFrom parameter is provided, this will return all
    products with an endDate greater than (or equal to) this value
    """

    end_date_to: Annotated[object, PropertyInfo(alias="endDateTo")]
    """
    Last date for a date range to filter products by endDate - formatted as
    yyyy-MM-dd. If an endDateTo parameter is provided, this will return all products
    with an endDate less than (or equal to) this value
    """

    fieldset: Literal["SHOW_SUMMARY"]

    genres: str
    """List of comma-separated categories to filter shows by.

    A show must have at least one provided category to appear in the results.
    """

    has_no_fees: Annotated[bool, PropertyInfo(alias="hasNoFees")]
    """When true, return only shows that have no booking fee"""

    hide_from_hero_list: Annotated[bool, PropertyInfo(alias="hideFromHeroList")]
    """When false, only include shows that should be displayed in the hero list"""

    include_aggregations: Annotated[bool, PropertyInfo(alias="includeAggregations")]
    """Include aggregate metadata, if specified"""

    limit: int
    """Max number of results to be returned, if specified."""

    location: int
    """location Id"""

    max_price: Annotated[int, PropertyInfo(alias="maxPrice")]
    """Max price to filter results by"""

    num_tickets: Annotated[int, PropertyInfo(alias="numTickets")]
    """Number of tickets"""

    offset: int
    """The offset at which to start (used with `limit` for pagination)."""

    on_sale_date_from: Annotated[object, PropertyInfo(alias="onSaleDateFrom")]
    """
    First date for a date range to filter products by onSaleDate - formatted as
    yyyy-MM-dd. If an onSaleDateFrom parameter is provided, this will return all
    products with an onSaleDate greater than (or equal to) this value
    """

    on_sale_date_to: Annotated[object, PropertyInfo(alias="onSaleDateTo")]
    """
    Last date for a date range to filter products by onSaleDate - formatted as
    yyyy-MM-dd. If an onSaleDateTo parameter is provided, this will return all
    products with an onSaleDate less than (or equal to) this value
    """

    query: str
    """search query, if specified"""

    relevance: Literal["CATEGORY", "VENUE"]
    """gives more relevance to the specified field in the search process"""

    sort_by: Annotated[
        Literal[
            "ALLOCATION",
            "START_DATE",
            "END_DATE",
            "LIFETIME_TICKET_VOLUME",
            "PRICE",
            "RECENT_CONVERSION_RATE",
            "RECENT_NET_REVENUE",
            "RECENT_PDP_VIEWS_COUNT",
            "RECENT_TRANSACTION_COUNT",
            "WEIGHTED_REVENUE_AND_VOLUME_SCORE",
        ],
        PropertyInfo(alias="sortBy"),
    ]
    """Field by which to sort the query results."""

    sort_order: Annotated[Literal["ASC", "DESC"], PropertyInfo(alias="sortOrder")]
    """Order by which to sort the results, if a sortBy parameter is provided."""

    start_date_from: Annotated[object, PropertyInfo(alias="startDateFrom")]
    """
    First date for a date range to filter products by startDate - formatted as
    yyyy-MM-dd. If a startDateFrom parameter is provided, this will return all
    products with a startDate greater than (or equal to) this value
    """

    start_date_to: Annotated[object, PropertyInfo(alias="startDateTo")]
    """
    Last date for a date range to filter products by startDate - formatted as
    yyyy-MM-dd. If a startDateTo parameter is provided, this will return all
    products with a startDate less than (or equal to) this value
    """

    subcategories: str
    """Comma-separated subcategory ID(s) to filter shows by.

    A show must have all of the provided subcategories to appear in the results.
    """

    use_override_fields: Annotated[bool, PropertyInfo(alias="useOverrideFields")]
    """
    When true, uses calculated FeeStructure#feeStructureOverride fees and prices for
    the show if they exist.
    """
