import { WORKDAYS } from '@humand-packages/common';
import { ShiftAssociation } from '../../business/models/shiftManagement/shiftCalendar';
import { TimeSlot } from '../../business/models/timeTracking/scheduleData';
import { TimeTrackingDaySummaryHoliday } from '../../business/models/timeTrackingDaySummaryHoliday';
import { TimeTrackingDaySummaryTimeOff } from '../../business/models/timeTrackingDaySummaryTimeOff';
import { DaySummaryScheduleSource } from '../../business/types/scheduleSource';
import { Incidence } from '../../infrastructure/constants/incidences';
import { State } from '../../infrastructure/constants/state';
import { TimeTrackingEntryExtended } from './timeTrackingEntryExtended';

export class TimeTrackingDaySummaryExtended {
    constructor(
        public readonly id: number,
        public readonly date: Date,
        public readonly dateString: string,
        public readonly estimatedHours: number,
        public readonly incidences: Incidence[],
        public readonly instanceId: number,
        public readonly userId: number,
        public readonly workScheduleId: number,
        public readonly workScheduleName: string,
        public readonly workScheduleDescription: string,
        public readonly workedHours: number,
        public readonly timeTrackingEntries: TimeTrackingEntryExtended[],
        public readonly holidays: TimeTrackingDaySummaryHoliday[],
        public readonly timeOffRequests: TimeTrackingDaySummaryTimeOff[],
        public readonly autoCloseTime: Date,
        public readonly dayChange: Date,
        public readonly state: State,
        public readonly extraHours: number,
        public readonly scheduledHours: number,
        public readonly weekday: WORKDAYS,
        public readonly timeSlots: TimeSlot[],
        public readonly latenessTolerance: number,
        public readonly isWorkday: boolean,
        public readonly scheduleSource: DaySummaryScheduleSource,
        public readonly shiftAssignedDayId?: number,
        public readonly shiftAssociations?: ShiftAssociation[],
    ) {}
}
