declare module "interfaces-bookings-availability-v2-availability-time-slots-configuration-provider" {
  type BusinessError<T = unknown> = {
      __tag: 'BusinessError';
      httpCode: string;
      errorDescription: string;
      applicationCode: string;
      messageSchema: string;
      data: T;
  };
  
  interface ListAvailabilityTimeSlotConfigurationsRequest {
      /** IDs of the services for which configurations are to be retrieved. */
      serviceIds?: string[];
  }
  interface ListAvailabilityTimeSlotConfigurationsResponse {
      /** The retrieved configurations. */
      configurations?: AvailabilityTimeSlotsConfiguration[];
  }
  interface AvailabilityTimeSlotsConfiguration {
      /** Service ID. */
      serviceId?: string;
      /** Resource types required to book this service, for instance, booking a room from the "rooms" resource type and a staff member from the "staff" resource type. */
      resourceTypes?: ResourceType[];
      /**
       * The locations this service is offered at.
       * Only multiple locations of type `BUSINESS` are supported. multiple locations of type `CUSTOM` or `CUSTOMER` are not supported.
       */
      locations?: Location[];
      /**
       * The time between available slots' start times.
       * For example, for 5-minute slots, 3:00, 3:05, 3:15 etc. For 1-hour slots, 3:00, 4:00, 5:00 etc.
       */
      splitIntervalInMinutes?: number;
      /** The duration of the service. */
      duration?: Duration;
      /**
       * The number of minutes between the end of a slot and the start of the next.
       * Min: `0 minutes`
       * Max: `720 minutes`
       */
      bufferTimeInMinutes?: number;
  }
  interface ResourceType {
      /** Resource type ID. */
      resourceTypeId?: string | null;
      /**
       * Resource IDs.
       * The potential resources available for booking, with the required number of resources to book defined by 'numberOfResourcesRequired.' These resources may be a subset within the resource type.
       */
      resourceIds?: string[] | null;
      /**
       * The number of resources required to book the service.
       * Optional.
       * Default: `1`
       * Currently only `1` is supported.
       */
      numberOfResourcesRequired?: number | null;
      /**
       * Whether to return the available resources in the response for this particular type.
       * Optional.
       * Default: `true`
       * Internal - Not supported yet.
       * @internal
       */
      returnAvailableResources?: boolean | null;
  }
  interface Location {
      /** Business Location ID. Present if the location is a business location. */
      _id?: string | null;
      /** Location name. */
      name?: string | null;
      /** A string containing the full address of this location. */
      formattedAddress?: string | null;
      /**
       * The type of location:
       * - `CUSTOM`: The location is specific to this service, and is not derived from the business location.
       * - `BUSINESS`: A business location, either the default business address, or locations defined for the business by the Business Info.
       * - `CUSTOMER`: Will be determined by the customer.
       */
      locationType?: LocationType;
  }
  enum LocationType {
      UNKNOWN_LOCATION_TYPE = "UNKNOWN_LOCATION_TYPE",
      /** The location is unique to this service and isn't defined as one of the business locations. */
      CUSTOM = "CUSTOM",
      /** The location is one of the business locations available using the Business Info. */
      BUSINESS = "BUSINESS",
      /** The location can be determined by the customer and is not set up beforehand. */
      CUSTOMER = "CUSTOMER"
  }
  interface Duration {
      /**
       * Default duration in minutes.
       * Min: `1 minute`
       * Max: `44639 minutes` (30 days, 23 hours, and 59 minutes)
       */
      defaultInMinutes?: number;
  }
  interface AvailabilityTimeSlotsProviderConfig {
      /** URI where the SPI Implementer is deployed. */
      deploymentUri?: SpiBaseUri;
      /** User-friendly name of the provider. */
      providerName?: string | null;
  }
  interface SpiBaseUri {
      /** URI that will be used by the host to call the implementer. The path-suffix defined on the method will be appended to it */
      baseUri?: string;
      /** override method mappings per method */
      alternativeUris?: AlternativeUri[];
  }
  interface AlternativeUri {
      /** name of the method as it appears in the proto */
      methodName?: string;
      /** absolute uri that will be used by the host to call that method. The path-suffix mapped from the method http option will NOT be appended to this URI. For TPAs. it must be https */
      absoluteUri?: string;
  }
  /**
   * this message is not directly used by any service,
   * it exists to describe the expected parameters that SHOULD be provided to invoked Velo methods as part of open-platform.
   * e.g. SPIs, event-handlers, etc..
   * NOTE: this context object MUST be provided as the last argument in each Velo method signature.
   *
   * Example:
   * ```typescript
   * export function wixStores_onOrderCanceled(event: OrderCanceledEvent, context: Context) {
   * ...
   * }
   * ```
   */
  interface Context {
      /** A unique identifier for each request. Can be used for logging / troubleshooting */
      requestId?: string | null;
      /** 3 capital letters string representing a currency according to ISO-4217 */
      currency?: string | null;
      /** The identification type and identity data */
      identity?: IdentificationData;
      /** A string representing a language and region in the format of "xx-XX". First 2 letters represent the language code according to ISO 639-1. This is followed by a dash "-", and then a by 2 capital letters representing the region according to ISO 3166-2 */
      languages?: string[];
      /** App instance ID of SPI in context */
      instanceId?: string | null;
  }
  enum IdentityType {
      UNKNOWN = "UNKNOWN",
      ANONYMOUS_VISITOR = "ANONYMOUS_VISITOR",
      MEMBER = "MEMBER",
      WIX_USER = "WIX_USER",
      APP = "APP"
  }
  interface IdentificationData extends IdentificationDataIdOneOf {
      /** ID of a site visitor that has not logged in to the site. */
      anonymousVisitorId?: string;
      /** ID of a site visitor that has logged in to the site. */
      memberId?: string;
      /** ID of a Wix user (site owner, contributor, etc.). */
      wixUserId?: string;
      /** ID of an app. */
      appId?: string;
      /** @readonly */
      identityType?: IdentityType;
  }
  /** @oneof */
  interface IdentificationDataIdOneOf {
      /** ID of a site visitor that has not logged in to the site. */
      anonymousVisitorId?: string;
      /** ID of a site visitor that has logged in to the site. */
      memberId?: string;
      /** ID of a Wix user (site owner, contributor, etc.). */
      wixUserId?: string;
      /** ID of an app. */
      appId?: string;
  }
  interface ListAvailabilityTimeSlotConfigurationsOptions {
      /** IDs of the services for which configurations are to be retrieved. */
      serviceIds?: string[];
  }
  
  export { AlternativeUri, AvailabilityTimeSlotsConfiguration, AvailabilityTimeSlotsProviderConfig, BusinessError, Context, Duration, IdentificationData, IdentificationDataIdOneOf, IdentityType, ListAvailabilityTimeSlotConfigurationsOptions, ListAvailabilityTimeSlotConfigurationsRequest, ListAvailabilityTimeSlotConfigurationsResponse, Location, LocationType, ResourceType, SpiBaseUri };
}
