import { MeetingType } from ".";

export interface DayTemplate {
  id: string;
  contact_id: string;
  name: string;
  color: string;
  is_unavailable?: boolean;
  order: number;
  created_at: string;
  updated_at: string;
}

export interface UnvailableDayTemplate extends DayTemplate {
  is_unavailable: true;
}

export interface AppliedDayTemplate {
  id: string;
  contact_id: string;
  day_template_id: string;
  date: string;
  is_unavailable: boolean;
  created_at: string;
  updated_at: string;
}

export interface AppliedDayTemplateWithDayTemplate extends AppliedDayTemplate {
  day_template: DayTemplate;
}

export interface WeekTemplate {
  id: string;
  contact_id: string;
  name: string;
  color: string;
  order: number;
  created_at: string;
  updated_at: string;
}

export interface WithWeekTimeSlots {
  week_time_slots: WeekTimeSlot[];
}

export interface WithDayTimeSlots {
  day_time_slots: DayTimeSlot[];
}

export interface AppliedWeekTemplate {
  id: string;
  contact_id: string;
  week_template_id: string;
  end: string;
  start: string;
  created_at: string;
  updated_at: string;
}
export interface ContactOfficeSubjectAvailabilitySettings {
  contact_office_subject_id: string;
  created_at: string;
  id: string;
  is_meeting_type_enabled: null | boolean;
  max_concurrent_appointments: number | null;
  meeting_type: MeetingType;
  updated_at: string;
}

export interface WeekContactOfficeSubjectAvailabilitySettings
  extends ContactOfficeSubjectAvailabilitySettings {
  week_timeslot_id: string;
}
export interface DayContactOfficeSubjectAvailabilitySettings
  extends ContactOfficeSubjectAvailabilitySettings {
  day_timeslot_id: string;
}

export interface WeekTimeSlot {
  id: string;
  week_template_id: string;
  day_of_week: number;
  end: string;
  start: string;
  created_at: string;
  updated_at: string;
}

export interface DayTimeSlot {
  id: string;
  day_template_id: string;
  day_of_week: undefined;
  end: string;
  start: string;
  created_at: string;
  updated_at: string;
}

export interface ContactOfficeAvailabilitySettings {
  id: string;
  contact_office_id: string;
  auto_accept: boolean | null;
  uses_subject_specific_settings: boolean;
  created_at: string;
  updated_at: string;
}

export interface WeekContactOfficeAvailabilitySettings extends ContactOfficeAvailabilitySettings {
  week_timeslot_id: string;
}
export interface DayContactOfficeAvailabilitySettings extends ContactOfficeAvailabilitySettings {
  day_timeslot_id: string;
}

export interface AppliedWeekTemplateWithWeekTemplate extends AppliedWeekTemplate {
  week_template: WeekTemplate;
}

export interface WithWeekAvailabilitySettings {
  contact_office_availability_settings: WeekContactOfficeAvailabilitySettings[];
  contact_office_subject_availability_settings: WeekContactOfficeSubjectAvailabilitySettings[];
}
export interface WithDayAvailabilitySettings {
  contact_office_availability_settings: DayContactOfficeAvailabilitySettings[];
  contact_office_subject_availability_settings: DayContactOfficeSubjectAvailabilitySettings[];
}
