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

import typing_extensions
import typing_extensions
import typing
from ..types.business_appointment_settings_booking_location_type import BusinessAppointmentSettingsBookingLocationType
from ..types.business_appointment_settings_alignment_time import BusinessAppointmentSettingsAlignmentTime
from ..types.business_appointment_settings_max_appointments_per_day_limit_type import (
    BusinessAppointmentSettingsMaxAppointmentsPerDayLimitType,
)
from .money import MoneyParams
from ..types.business_appointment_settings_cancellation_policy import BusinessAppointmentSettingsCancellationPolicy


class BusinessAppointmentSettingsParams(typing_extensions.TypedDict):
    """
    The service appointment settings, including where and how the service is provided.
    """

    location_types: typing_extensions.NotRequired[
        typing.Optional[typing.Sequence[BusinessAppointmentSettingsBookingLocationType]]
    ]
    """
    Types of the location allowed for bookings.
    See [BusinessAppointmentSettingsBookingLocationType](#type-businessappointmentsettingsbookinglocationtype) for possible values
    """

    alignment_time: typing_extensions.NotRequired[BusinessAppointmentSettingsAlignmentTime]
    """
    The time unit of the service duration for bookings.
    See [BusinessAppointmentSettingsAlignmentTime](#type-businessappointmentsettingsalignmenttime) for possible values
    """

    min_booking_lead_time_seconds: typing_extensions.NotRequired[typing.Optional[int]]
    """
    The minimum lead time in seconds before a service can be booked. A booking must be created at least this amount of time before its starting time.
    """

    max_booking_lead_time_seconds: typing_extensions.NotRequired[typing.Optional[int]]
    """
    The maximum lead time in seconds before a service can be booked. A booking must be created at most this amount of time before its starting time.
    """

    any_team_member_booking_enabled: typing_extensions.NotRequired[typing.Optional[bool]]
    """
    Indicates whether a customer can choose from all available time slots and have a staff member assigned
    automatically (`true`) or not (`false`).
    """

    multiple_service_booking_enabled: typing_extensions.NotRequired[typing.Optional[bool]]
    """
    Indicates whether a customer can book multiple services in a single online booking.
    """

    max_appointments_per_day_limit_type: typing_extensions.NotRequired[
        BusinessAppointmentSettingsMaxAppointmentsPerDayLimitType
    ]
    """
    Indicates whether the daily appointment limit applies to team members or to
    business locations.
    See [BusinessAppointmentSettingsMaxAppointmentsPerDayLimitType](#type-businessappointmentsettingsmaxappointmentsperdaylimittype) for possible values
    """

    max_appointments_per_day_limit: typing_extensions.NotRequired[typing.Optional[int]]
    """
    The maximum number of daily appointments per team member or per location.
    """

    cancellation_window_seconds: typing_extensions.NotRequired[typing.Optional[int]]
    """
    The cut-off time in seconds for allowing clients to cancel or reschedule an appointment.
    """

    cancellation_fee_money: typing_extensions.NotRequired[MoneyParams]
    """
    The flat-fee amount charged for a no-show booking.
    """

    cancellation_policy: typing_extensions.NotRequired[BusinessAppointmentSettingsCancellationPolicy]
    """
    The cancellation policy adopted by the seller.
    See [BusinessAppointmentSettingsCancellationPolicy](#type-businessappointmentsettingscancellationpolicy) for possible values
    """

    cancellation_policy_text: typing_extensions.NotRequired[typing.Optional[str]]
    """
    The free-form text of the seller's cancellation policy.
    """

    skip_booking_flow_staff_selection: typing_extensions.NotRequired[typing.Optional[bool]]
    """
    Indicates whether customers has an assigned staff member (`true`) or can select s staff member of their choice (`false`).
    """
