// Code generated by msgraph.go/gen DO NOT EDIT.

package msgraph

// BookingAppointment Represents a booked appointment of a service by a customer in a business.
type BookingAppointment struct {
	// Entity is the base model of BookingAppointment
	Entity
	// SelfServiceAppointmentID undocumented
	SelfServiceAppointmentID *string `json:"selfServiceAppointmentId,omitempty"`
	// CustomerID The id of the booking customer associated with this appointment.
	CustomerID *string `json:"customerId,omitempty"`
	// CustomerName undocumented
	CustomerName *string `json:"customerName,omitempty"`
	// CustomerEmailAddress undocumented
	CustomerEmailAddress *string `json:"customerEmailAddress,omitempty"`
	// CustomerPhone undocumented
	CustomerPhone *string `json:"customerPhone,omitempty"`
	// CustomerLocation undocumented
	CustomerLocation *Location `json:"customerLocation,omitempty"`
	// CustomerNotes Notes from the customer associated with this appointment.
	CustomerNotes *string `json:"customerNotes,omitempty"`
	// ServiceID The id of the booking service associated with this appointment.
	ServiceID *string `json:"serviceId,omitempty"`
	// ServiceName The name of the booking service associated with this appointment.
	ServiceName *string `json:"serviceName,omitempty"`
	// Start undocumented
	Start *DateTimeTimeZone `json:"start,omitempty"`
	// End undocumented
	End *DateTimeTimeZone `json:"end,omitempty"`
	// Duration undocumented
	Duration *Duration `json:"duration,omitempty"`
	// PreBuffer undocumented
	PreBuffer *Duration `json:"preBuffer,omitempty"`
	// PostBuffer undocumented
	PostBuffer *Duration `json:"postBuffer,omitempty"`
	// ServiceLocation undocumented
	ServiceLocation *Location `json:"serviceLocation,omitempty"`
	// PriceType undocumented
	PriceType *BookingPriceType `json:"priceType,omitempty"`
	// Price undocumented
	Price *float64 `json:"price,omitempty"`
	// ServiceNotes undocumented
	ServiceNotes *string `json:"serviceNotes,omitempty"`
	// Reminders undocumented
	Reminders []BookingReminder `json:"reminders,omitempty"`
	// OptOutOfCustomerEmail undocumented
	OptOutOfCustomerEmail *bool `json:"optOutOfCustomerEmail,omitempty"`
	// StaffMemberIDs undocumented
	StaffMemberIDs []string `json:"staffMemberIds,omitempty"`
	// InvoiceAmount undocumented
	InvoiceAmount *float64 `json:"invoiceAmount,omitempty"`
	// InvoiceDate undocumented
	InvoiceDate *DateTimeTimeZone `json:"invoiceDate,omitempty"`
	// InvoiceID undocumented
	InvoiceID *string `json:"invoiceId,omitempty"`
	// InvoiceStatus undocumented
	InvoiceStatus *BookingInvoiceStatus `json:"invoiceStatus,omitempty"`
	// InvoiceURL undocumented
	InvoiceURL *string `json:"invoiceUrl,omitempty"`
}

// BookingBusiness Represents a Microsot Bookings Business.
type BookingBusiness struct {
	// BookingNamedEntity is the base model of BookingBusiness
	BookingNamedEntity
	// BusinessType undocumented
	BusinessType *string `json:"businessType,omitempty"`
	// Address undocumented
	Address *PhysicalAddress `json:"address,omitempty"`
	// Phone undocumented
	Phone *string `json:"phone,omitempty"`
	// Email undocumented
	Email *string `json:"email,omitempty"`
	// WebSiteURL The URL of the business web site.
	WebSiteURL *string `json:"webSiteUrl,omitempty"`
	// DefaultCurrencyIso undocumented
	DefaultCurrencyIso *string `json:"defaultCurrencyIso,omitempty"`
	// BusinessHours undocumented
	BusinessHours []BookingWorkHours `json:"businessHours,omitempty"`
	// SchedulingPolicy undocumented
	SchedulingPolicy *BookingSchedulingPolicy `json:"schedulingPolicy,omitempty"`
	// IsPublished undocumented
	IsPublished *bool `json:"isPublished,omitempty"`
	// PublicURL undocumented
	PublicURL *string `json:"publicUrl,omitempty"`
	// Appointments undocumented
	Appointments []BookingAppointment `json:"appointments,omitempty"`
	// CalendarView undocumented
	CalendarView []BookingAppointment `json:"calendarView,omitempty"`
	// Customers undocumented
	Customers []BookingCustomer `json:"customers,omitempty"`
	// Services undocumented
	Services []BookingService `json:"services,omitempty"`
	// StaffMembers undocumented
	StaffMembers []BookingStaffMember `json:"staffMembers,omitempty"`
}

// BookingCurrency undocumented
type BookingCurrency struct {
	// Entity is the base model of BookingCurrency
	Entity
	// Symbol undocumented
	Symbol *string `json:"symbol,omitempty"`
}

// BookingCustomer Represents a customer of the business.
type BookingCustomer struct {
	// BookingPerson is the base model of BookingCustomer
	BookingPerson
}

// BookingNamedEntity Booking entities that provide a display name.
type BookingNamedEntity struct {
	// Entity is the base model of BookingNamedEntity
	Entity
	// DisplayName Display name of this entity.
	DisplayName *string `json:"displayName,omitempty"`
}

// BookingPerson Represents a booking customer or staff member.
type BookingPerson struct {
	// BookingNamedEntity is the base model of BookingPerson
	BookingNamedEntity
	// EmailAddress The e-mail address of this person.
	EmailAddress *string `json:"emailAddress,omitempty"`
}

// BookingReminder undocumented
type BookingReminder struct {
	// Object is the base model of BookingReminder
	Object
	// Offset How much time before an appointment the reminder should be sent.
	Offset *Duration `json:"offset,omitempty"`
	// Recipients Who should receive the reminder.
	Recipients *BookingReminderRecipients `json:"recipients,omitempty"`
	// Message Message to send.
	Message *string `json:"message,omitempty"`
}

// BookingSchedulingPolicy undocumented
type BookingSchedulingPolicy struct {
	// Object is the base model of BookingSchedulingPolicy
	Object
	// TimeSlotInterval Duration of each time slot.
	TimeSlotInterval *Duration `json:"timeSlotInterval,omitempty"`
	// MinimumLeadTime Minimum lead time for bookings and cancellations.
	MinimumLeadTime *Duration `json:"minimumLeadTime,omitempty"`
	// MaximumAdvance Maximum number of days in advance that a booking can be made.
	MaximumAdvance *Duration `json:"maximumAdvance,omitempty"`
	// SendConfirmationsToOwner Notify the business via email when a booking is created or changed.
	SendConfirmationsToOwner *bool `json:"sendConfirmationsToOwner,omitempty"`
	// AllowStaffSelection Allow customers to choose a specific person for the booking.
	AllowStaffSelection *bool `json:"allowStaffSelection,omitempty"`
}

// BookingService Represents a particular service offered by a booking business.
type BookingService struct {
	// BookingNamedEntity is the base model of BookingService
	BookingNamedEntity
	// DefaultDuration undocumented
	DefaultDuration *Duration `json:"defaultDuration,omitempty"`
	// DefaultLocation undocumented
	DefaultLocation *Location `json:"defaultLocation,omitempty"`
	// DefaultPrice undocumented
	DefaultPrice *float64 `json:"defaultPrice,omitempty"`
	// DefaultPriceType undocumented
	DefaultPriceType *BookingPriceType `json:"defaultPriceType,omitempty"`
	// DefaultReminders The default reminders set in an appointment of this service.
	DefaultReminders []BookingReminder `json:"defaultReminders,omitempty"`
	// Description undocumented
	Description *string `json:"description,omitempty"`
	// IsHiddenFromCustomers undocumented
	IsHiddenFromCustomers *bool `json:"isHiddenFromCustomers,omitempty"`
	// Notes undocumented
	Notes *string `json:"notes,omitempty"`
	// PreBuffer undocumented
	PreBuffer *Duration `json:"preBuffer,omitempty"`
	// PostBuffer undocumented
	PostBuffer *Duration `json:"postBuffer,omitempty"`
	// SchedulingPolicy undocumented
	SchedulingPolicy *BookingSchedulingPolicy `json:"schedulingPolicy,omitempty"`
	// StaffMemberIDs undocumented
	StaffMemberIDs []string `json:"staffMemberIds,omitempty"`
}

// BookingStaffMember Represents a staff member who provides services in a business.
type BookingStaffMember struct {
	// BookingPerson is the base model of BookingStaffMember
	BookingPerson
	// AvailabilityIsAffectedByPersonalCalendar undocumented
	AvailabilityIsAffectedByPersonalCalendar *bool `json:"availabilityIsAffectedByPersonalCalendar,omitempty"`
	// ColorIndex undocumented
	ColorIndex *int `json:"colorIndex,omitempty"`
	// Role undocumented
	Role *BookingStaffRole `json:"role,omitempty"`
	// UseBusinessHours undocumented
	UseBusinessHours *bool `json:"useBusinessHours,omitempty"`
	// WorkingHours undocumented
	WorkingHours []BookingWorkHours `json:"workingHours,omitempty"`
}

// BookingWorkHours undocumented
type BookingWorkHours struct {
	// Object is the base model of BookingWorkHours
	Object
	// Day The day of the week represented by this instance.
	Day *DayOfWeek `json:"day,omitempty"`
	// TimeSlots A list of start/end times during a day.
	TimeSlots []BookingWorkTimeSlot `json:"timeSlots,omitempty"`
}

// BookingWorkTimeSlot undocumented
type BookingWorkTimeSlot struct {
	// Object is the base model of BookingWorkTimeSlot
	Object
	// Start undocumented
	Start *TimeOfDay `json:"start,omitempty"`
	// End undocumented
	End *TimeOfDay `json:"end,omitempty"`
}