import { BaseRepositoryPort } from '@humand-packages/common';
import { GridFilterRequest } from '../../../business/interfaces/shiftManagement/gridFiltersInterface';
import { ShiftAssignedDay, ShiftAssignedDayForCreation } from '../../../business/models/shiftManagement/shiftAssignedDay';
import { ShiftAssignedShift, ShiftAssignedShiftForCreation } from '../../../business/models/shiftManagement/shiftAssignedShift';
import { ShiftAssignedTimeSlot, ShiftAssignedTimeSlotForCreation } from '../../../business/models/shiftManagement/shiftAssignedTimeSlot';

export default abstract class ShiftAssignedDayRepositoryPort extends BaseRepositoryPort {
    abstract getShiftAssignedDaysByUser(userId: number, instanceId: number, fromDate: string, toDate: string): Promise<ShiftAssignedDay[]>;
    abstract getShiftAssignedDayById(id: number): Promise<ShiftAssignedDay | null>;
    abstract getShiftAssignedDaysByIds(ids: number[]): Promise<ShiftAssignedDay[]>;
    abstract getShiftAssignedDaysByGridFilters(instanceId: number, filters: GridFilterRequest): Promise<ShiftAssignedDay[]>;
    abstract getShiftAssignedDaysByShiftName(instanceId: number, shiftName: string, startDate: string, endDate: string): Promise<ShiftAssignedDay[]>;
    abstract getUserIdsWithRotationInRange(instanceId: number, rotationIds: string[], startDate: string, endDate: string): Promise<number[]>;
    abstract bulkCreateShiftAssignedDays(shiftAssignedDays: ShiftAssignedDayForCreation[]): Promise<ShiftAssignedDay[]>;
    abstract getShiftAssignedShifts(instanceId: number, assignedShiftIds: number[]): Promise<ShiftAssignedShift[]>;
    abstract bulkDeleteShiftAssignedDayAssociations(instanceId: number, assignedDayIds: number[]): Promise<void>;
    abstract bulkCreateShiftAssignedShifts(shiftAssignedShifts: ShiftAssignedShiftForCreation[]): Promise<ShiftAssignedShift[]>;
    abstract bulkCreateShiftAssignedTimeSlots(shiftAssignedTimeSlots: ShiftAssignedTimeSlotForCreation[]): Promise<ShiftAssignedTimeSlot[]>;
}
