import { ValidationError } from '../types/errors';

export interface ShiftScheduleDraft {
  shiftStartTime: string;
  shiftEndTime?: string;
  graceMinutes: number;
  saturdayShiftEnabled: boolean;
  sundayShiftEnabled: boolean;
  holidayShiftEnabled: boolean;
  memberAssignments: Array<{
    employeeId: string;
    date: string;
    startTime: string;
    endTime: string;
    notes?: string;
  }>;
}

export class TeamShiftScheduleBuilder {
  private data: Partial<ShiftScheduleDraft> = {
    graceMinutes: 10,
    saturdayShiftEnabled: false,
    sundayShiftEnabled: false,
    holidayShiftEnabled: false,
    memberAssignments: [],
  };

  shiftStartTime(time: string): this {
    this.data.shiftStartTime = time;
    return this;
  }

  shiftEndTime(time: string): this {
    this.data.shiftEndTime = time;
    return this;
  }

  flags(saturday: boolean, sunday: boolean, holiday: boolean): this {
    this.data.saturdayShiftEnabled = saturday;
    this.data.sundayShiftEnabled = sunday;
    this.data.holidayShiftEnabled = holiday;
    return this;
  }

  addAssignment(employeeId: string, date: string, startTime: string, endTime: string, notes?: string): this {
    this.data.memberAssignments!.push({ employeeId, date, startTime, endTime, notes });
    return this;
  }

  build(): ShiftScheduleDraft {
    if (!this.data.shiftStartTime) throw new ValidationError('shiftStartTime required');
    return this.data as ShiftScheduleDraft;
  }
}
