import { BalanceField } from '../types/prisma';
import { HolidayRepository } from '../repositories/HolidayRepository';
import { LeaveBalanceService } from '../domain/leave/LeaveBalanceService';
import { TeamShiftFacade } from './TeamShiftFacade';
import { BackdatedLeaveFacade } from './BackdatedLeaveFacade';
import { LeavesAppSettingsService } from '../services/LeavesAppSettingsService';
import { EmployeeSettingsService } from '../services/EmployeeSettingsService';
import { AutoWeekdayAttendanceService } from '../services/AutoWeekdayAttendanceService';
import { LeaveFacade } from './LeaveFacade';
import { TeamManagementService } from '../services/TeamManagementService';
import { CreateLeaveDto } from '../types';
export declare class HrAdminFacade {
    private holidayRepo;
    private balanceService;
    private shiftFacade;
    private appSettings;
    private employeeSettings;
    private autoWeekdayAttendance;
    private teamManagement;
    constructor(holidayRepo?: HolidayRepository, balanceService?: LeaveBalanceService, shiftFacade?: TeamShiftFacade, appSettings?: LeavesAppSettingsService, employeeSettings?: EmployeeSettingsService, autoWeekdayAttendance?: AutoWeekdayAttendanceService, teamManagement?: TeamManagementService);
    private prisma;
    listHolidays(year?: number): import(".prisma/client").Prisma.PrismaPromise<{
        name: string;
        date: Date;
        created_at: Date;
        id: number;
        updated_at: Date;
        recurring_yearly: boolean;
    }[]>;
    createHoliday(input: {
        date: string;
        name: string;
        recurringYearly: boolean;
    }): import(".prisma/client").Prisma.Prisma__holidaysClient<{
        name: string;
        date: Date;
        created_at: Date;
        id: number;
        updated_at: Date;
        recurring_yearly: boolean;
    }, never, import("@prisma/client/runtime/library").DefaultArgs>;
    /**
     * Bulk-create holidays for a year (or any dates). Skips dates that already exist.
     */
    bulkCreateHolidays(items: Array<{
        date: string;
        name: string;
        recurringYearly?: boolean;
    }>): Promise<{
        created: number;
        skipped: number;
        totalRequested: number;
        items: {
            name: string;
            date: Date;
            created_at: Date;
            id: number;
            updated_at: Date;
            recurring_yearly: boolean;
        }[];
    }>;
    updateHoliday(id: number, input: {
        date?: string;
        name?: string;
        recurringYearly?: boolean;
    }): import(".prisma/client").Prisma.Prisma__holidaysClient<{
        name: string;
        date: Date;
        created_at: Date;
        id: number;
        updated_at: Date;
        recurring_yearly: boolean;
    }, never, import("@prisma/client/runtime/library").DefaultArgs>;
    deleteHoliday(id: number): import(".prisma/client").Prisma.Prisma__holidaysClient<{
        name: string;
        date: Date;
        created_at: Date;
        id: number;
        updated_at: Date;
        recurring_yearly: boolean;
    }, never, import("@prisma/client/runtime/library").DefaultArgs>;
    adjustBalance(employeeId: string, field: BalanceField, delta: number, reason: string, hrUsername: string): Promise<import("../types").LeaveBalancesDto>;
    /** Define absolute CL/SL opening balances from previous/historical data. */
    setOpeningBalances(employeeId: string, values: {
        sickLeave?: number;
        casualLeave?: number;
    }, reason: string, hrUsername: string): Promise<import("../types").LeaveBalancesDto>;
    /** Credit +1 CL and +1 SL for every active employee for the given YYYY-MM (idempotent). */
    runMonthlyAccrual(yearMonth: string, hrUsername: string, leaveFacade: LeaveFacade): Promise<{
        skipped: boolean;
        yearMonth: string;
        credited?: undefined;
    } | {
        credited: number;
        yearMonth: string;
        skipped?: undefined;
    }>;
    shiftCompliance(month?: string): Promise<{
        effectiveMonth: string;
        currentMonth: string;
        nextMonth: string;
        allowCurrentMonthPlanning: boolean;
        minEditableMonth: string;
        summary: {
            totalTeams: number;
            needsAction: number;
            compliant: number;
        };
        teams: {
            teamId: string;
            teamName: string;
            effectiveMonth: string;
            managerEmployeeId: string | null;
            managerName: string | null;
            managerEmail: string | null;
            plannerEmployeeId: string | null;
            plannerName: string | null;
            responsibleEmployeeId: string | null;
            responsibleName: string | null;
            responsibleRole: string;
            status: string;
            approvalCount: number;
            submittedByEmployeeId: string | null;
            teamManagers: {
                employeeId: string;
                name: string;
                email: string;
            }[];
            assignedVerifiers: {
                employeeId: string;
                name: string;
            }[];
            pendingVerifiers: {
                employeeId: string;
                name: string;
            }[];
            compliant: boolean;
            needsAction: boolean;
        }[];
    }>;
    assignShiftPlanner(teamId: string, month: string, plannerEmployeeId: string, hrUsername: string): Promise<{
        teamId: string;
        plannerEmployeeId: string;
        effectiveMonth: string;
    }>;
    assignShiftVerifiers(teamId: string, month: string, verifierEmployeeIds: string[], hrUsername: string): Promise<{
        teamId: string;
        effectiveMonth: string;
        verifiers: {
            employeeId: string;
            name: string;
        }[];
    }>;
    getTeamShiftAssignments(teamId: string, month: string): Promise<{
        teamId: string;
        teamName: string;
        effectiveMonth: string;
        managers: {
            employeeId: string;
            name: string;
            email: string;
        }[];
        delegatedPlannerId: string | null;
        verifierEmployeeIds: string[];
        verifiers: {
            employeeId: string;
            name: string;
        }[];
    }>;
    getTimingManagerAssignments(teamId: string, month: string): Promise<{
        teamId: string;
        teamName: string;
        effectiveMonth: string;
        canAssign: boolean;
        managers: {
            employeeId: string;
            name: string;
            email: string;
        }[];
        shiftDefinitions: {
            id: string;
            name: string;
            startTime: string;
            endTime: string;
            graceMinutes: number;
            workingDays: number[];
            workingDaysLabel: string;
        }[];
        employees: {
            employeeId: string;
            name: string;
        }[];
        assignments: {
            employeeId: string;
            managerEmployeeId: string;
            shiftDefinitionId: string | null;
            shiftStartTime: string | null;
            shiftEndTime: string | null;
            readOnly: boolean;
            lockedReason: string | null;
            managerName: string | null;
            shiftName: string | null;
            originTeamId: string | null;
            originTeamName: string | null;
        }[];
    }>;
    saveTimingManagerAssignments(teamId: string, month: string, assignments: Array<{
        employeeId: string;
        managerEmployeeId: string | null;
        shiftDefinitionId?: string | null;
        shiftStartTime?: string | null;
        shiftEndTime?: string | null;
    }>, hrUsername: string): Promise<{
        teamId: string;
        teamName: string;
        effectiveMonth: string;
        canAssign: boolean;
        managers: {
            employeeId: string;
            name: string;
            email: string;
        }[];
        shiftDefinitions: {
            id: string;
            name: string;
            startTime: string;
            endTime: string;
            graceMinutes: number;
            workingDays: number[];
            workingDaysLabel: string;
        }[];
        employees: {
            employeeId: string;
            name: string;
        }[];
        assignments: {
            employeeId: string;
            managerEmployeeId: string;
            shiftDefinitionId: string | null;
            shiftStartTime: string | null;
            shiftEndTime: string | null;
            readOnly: boolean;
            lockedReason: string | null;
            managerName: string | null;
            shiftName: string | null;
            originTeamId: string | null;
            originTeamName: string | null;
        }[];
    } | {
        teamId: string;
        effectiveMonth: string;
        canAssign: true;
        managers: {
            employeeId: string;
            name: string;
            email: string;
        }[];
        shiftDefinitions: {
            id: string;
            name: string;
            startTime: string;
            endTime: string;
            graceMinutes: number;
            workingDays: number[];
            workingDaysLabel: string;
        }[];
        employees: {
            employeeId: string;
            name: string;
            email: string;
            managerLevel: number;
            roleLabel: string;
            isManager: boolean;
            isAdmin: boolean;
        }[];
        assignments: {
            employeeId: string;
            managerEmployeeId: string;
            shiftDefinitionId: string | null;
            shiftStartTime: string | null;
            shiftEndTime: string | null;
            readOnly: boolean;
            lockedReason: string | null;
            managerName: string | null;
            shiftName: string | null;
            originTeamId: string | null;
            originTeamName: string | null;
        }[];
    }>;
    listShiftDefinitions(teamId: string): Promise<{
        teamId: string;
        items: {
            id: string;
            name: string;
            startTime: string;
            endTime: string;
            graceMinutes: number;
            workingDays: number[];
            workingDaysLabel: string;
        }[];
    }>;
    upsertShiftDefinition(teamId: string, hrUsername: string, input: {
        id?: string;
        name: string;
        startTime: string;
        endTime: string;
        graceMinutes?: number;
        workingDays?: number[];
    }): Promise<{
        id: string;
        name: string;
        startTime: string;
        endTime: string;
        graceMinutes: number;
        workingDays: number[];
        workingDaysLabel: string;
    }>;
    deleteShiftDefinition(teamId: string, definitionId: string): Promise<{
        deleted: boolean;
        id: string;
    }>;
    applyMappedShifts(teamId: string, month: string): Promise<{
        teamId: string;
        effectiveMonth: string;
        status: string;
        shiftStartTime: string;
        shiftEndTime: string | null;
        graceMinutes: number;
        saturdayShiftEnabled: boolean;
        sundayShiftEnabled: boolean;
        holidayShiftEnabled: boolean;
        submittedByEmployeeId: string | null;
        approvalCount: number;
        memberAssignments: {
            employeeId: string;
            date: string;
            shiftStartTime: string;
            shiftEndTime: string;
            notes: string | null;
        }[];
    }>;
    waivePenalty(penaltyId: string, hrUsername: string, reason: string): Promise<{
        waived: boolean;
    }>;
    hrApproveBackdated(hrUsername: string, leaveId: string, approvalReason: string, backdatedFacade: BackdatedLeaveFacade): Promise<{
        backdateApprovalCount: number;
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    getShiftCurrentMonthSetting(): Promise<{
        enabled: boolean;
    }>;
    setShiftCurrentMonthSetting(enabled: boolean, hrUsername: string): Promise<{
        enabled: boolean;
    }>;
    getOtpDebugSetting(): Promise<{
        enabled: boolean;
    }>;
    setOtpDebugSetting(enabled: boolean, hrUsername: string): Promise<{
        enabled: boolean;
    }>;
    listEmployees(search?: string): Promise<{
        items: {
            employeeId: string;
            name: string;
            email: string;
            department: string | null;
            attendanceAutoWeekdays: boolean;
        }[];
    }>;
    setAttendanceAutoWeekdays(employeeId: string, enabled: boolean, hrUsername: string): Promise<{
        employeeId: string;
        attendanceAutoWeekdays: boolean;
    }>;
    applyDefaultAutoWeekdayLeaders(hrUsername: string): Promise<{
        applied: {
            employeeId: string;
            name: string;
        }[];
    }>;
    recordLeave(hrUsername: string, employeeId: string, dto: CreateLeaveDto, leaveFacade: LeaveFacade): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    syncAutoWeekdayAttendance(from?: string, to?: string): Promise<{
        synced: number;
        employeeCount: number;
        from: string;
        to: string;
    }>;
    listTeams(): Promise<{
        items: {
            teamId: string;
            teamName: string;
            description: string | null;
            leadEmployeeId: string | null;
            leadName: string | null;
            memberCount: number;
        }[];
    }>;
    getTeam(teamId: string): Promise<{
        teamId: string;
        teamName: string;
        description: string | null;
        leadEmployeeId: string;
        leadName: string;
        memberCount: number;
        members: {
            employeeId: string;
            name: string;
            email: string;
            role: "lead" | "member";
            managerLevel: number;
            isManager: boolean;
            isAdmin: boolean;
            isLead: boolean;
            joinedAt: string;
        }[];
    }>;
    addTeamMember(teamId: string, employeeId: string, hrUsername: string): Promise<{
        teamId: string;
        teamName: string;
        description: string | null;
        leadEmployeeId: string;
        leadName: string;
        memberCount: number;
        members: {
            employeeId: string;
            name: string;
            email: string;
            role: "lead" | "member";
            managerLevel: number;
            isManager: boolean;
            isAdmin: boolean;
            isLead: boolean;
            joinedAt: string;
        }[];
    }>;
    removeTeamMember(teamId: string, employeeId: string, hrUsername: string): Promise<{
        teamId: string;
        teamName: string;
        description: string | null;
        leadEmployeeId: string;
        leadName: string;
        memberCount: number;
        members: {
            employeeId: string;
            name: string;
            email: string;
            role: "lead" | "member";
            managerLevel: number;
            isManager: boolean;
            isAdmin: boolean;
            isLead: boolean;
            joinedAt: string;
        }[];
    }>;
    setTeamLead(teamId: string, employeeId: string, hrUsername: string): Promise<{
        teamId: string;
        teamName: string;
        description: string | null;
        leadEmployeeId: string;
        leadName: string;
        memberCount: number;
        members: {
            employeeId: string;
            name: string;
            email: string;
            role: "lead" | "member";
            managerLevel: number;
            isManager: boolean;
            isAdmin: boolean;
            isLead: boolean;
            joinedAt: string;
        }[];
    }>;
}
//# sourceMappingURL=HrAdminFacade.d.ts.map