import { Media } from './Media'; import { BaseModel, PublishableModel } from './Model'; import { Pricing } from './Pricing'; import { PeriodInterval } from './common'; import { BookingConfirmation, Gender, ServiceKind, ServicePricingType } from './enums'; import { LocationGeo, ServiceLocation } from './Location'; import { ServiceProfileMinimal } from './BusinessProfile'; import { ResourceFaq } from './ResourceFaq'; export interface ServiceGroup extends BaseModel { id: number; name: string; color?: string; position: number; description?: string; image?: Media; } export interface ServiceVariant extends BaseModel { id: number; gid: string; name: string; image?: Media; gallery: Media[]; pricing_type: ServicePricingType; pricing?: Pricing; duration: number; position: number; cancellation_fee?: number; comparison_pricing?: Pricing; pricing_description?: string; price: number; comparison_price?: number; } export interface Service extends PublishableModel { object: "service"; type?: string; type_name?: string; kind: ServiceKind; image?: Media; gallery: Media[]; video_url?: string; attachments: Media[]; description?: string; aftercare_description?: string; currency_code?: string; price: number; comparison_price: number; price_min: number; price_max: number; duration: number; purchase_action?: string; tags: string[]; private: boolean; position: number; timezone?: string; confirmation: BookingConfirmation; recurring?: PeriodInterval; allow_guests: boolean; gender?: Gender; age_restriction?: string; cancellation_policy?: string; hide_calendar_notes: boolean; minimum_booking_notice: boolean; seats_show_attendees: boolean; seats_show_availability_count: boolean; seo_title?: string; seo_description?: string; seo_keywords?: string[]; schedule_id: number; faqs?: ResourceFaq[]; serviceProfile?: ServiceProfileMinimal; group: ServiceGroup; teamMembers: ServiceTeamMember[]; locations: ServiceLocation[]; variants: ServiceVariant[]; _geo?: LocationGeo; } export interface ServiceTeamMember extends BaseModel { id: string; name: string; bio?: string; avatar?: Media; }