import { Repository } from 'typeorm';
import { LeaveRequest } from './entities/leave-request.entity';
import { LeaveBalance } from './entities/leave-balance.entity';
import { LeaveType } from './entities/leave-type.entity';
import { User } from '../users/entities/user.entity';
import { CreateLeaveRequestDto } from './dto/create-leave-request.dto';
import { ValidateLeaveDto } from './dto/validate-leave.dto';
import { PublicHoliday } from '../holidays/entities/public-holiday.entity';
import { AuditLog } from '../audit/entities/audit-log.entity';
import { PlanningService } from '../planning/planning.service';
import { NotificationsService } from '../notifications/notifications.service';
import { MailService } from '../notifications/mail.service';
export declare class LeavesService {
    private readonly leaveRequestRepo;
    private readonly leaveBalanceRepo;
    private readonly leaveTypeRepo;
    private readonly holidayRepo;
    private readonly userRepo;
    private readonly auditLogRepo;
    private readonly planningService;
    private readonly notificationsService;
    private readonly mailService;
    private readonly logger;
    constructor(leaveRequestRepo: Repository<LeaveRequest>, leaveBalanceRepo: Repository<LeaveBalance>, leaveTypeRepo: Repository<LeaveType>, holidayRepo: Repository<PublicHoliday>, userRepo: Repository<User>, auditLogRepo: Repository<AuditLog>, planningService: PlanningService, notificationsService: NotificationsService, mailService: MailService);
    private holidayCache;
    private getHolidayDates;
    getOne(userId: number, requestId: number): Promise<LeaveRequest>;
    createRequest(user: User, dto: CreateLeaveRequestDto): Promise<LeaveRequest>;
    validate(validator: User, requestId: number, dto: ValidateLeaveDto): Promise<LeaveRequest>;
    cancel(user: User, requestId: number): Promise<LeaveRequest>;
    getBalance(userId: number, leaveTypeId: number): Promise<LeaveBalance & {
        remaining: number;
    }>;
    private deductBalance;
    getMyRequests(userId: number): Promise<LeaveRequest[]>;
    getPendingForValidator(validator: User): Promise<LeaveRequest[]>;
    calculateDays(userId: number, startDate: string, endDate: string, leaveTypeId: number, halfDayStart?: boolean, halfDayEnd?: boolean): Promise<{
        days_count: number;
        balance?: number;
    }>;
    attachFile(requestId: number, userId: number, filename: string): Promise<LeaveRequest>;
    createRequestWithFile(user: User, dto: CreateLeaveRequestDto, filename?: string): Promise<LeaveRequest & {
        threshold_warning?: string;
    }>;
    adjustBalance(adminUser: User, userId: number, leaveTypeId: number, adjustment: number, reason: string): Promise<LeaveBalance & {
        remaining: number;
    }>;
    setBalance(adminUser: User, userId: number, leaveTypeId: number, newBalance: number, reason: string): Promise<LeaveBalance & {
        remaining: number;
    }>;
    getAllBalances(userId: number): Promise<(LeaveBalance & {
        remaining: number;
    })[]>;
    getTeamBalances(teamId: number, leaveTypeId: number): Promise<{
        user: Partial<User>;
        balance: LeaveBalance & {
            remaining: number;
        };
    }[]>;
    findUserById(userId: number): Promise<User>;
}
