import { Repository } from 'typeorm';
import { LeaveRequest } from './leave-request.entity';
import { LeaveType } from 'common/enums/leaves.enum';
import { LeaveBalance } from './leave-balance.entity';
import { User } from '../users/user.entity';
import { CreateLeaveRequestDto } from './dto/create-leave-request.dto';
import { NotificationsService } from 'src/notifications/notifications.service';
import { PaginationQueryDto } from 'common/dto/pagination-query.dto';
import { Attendance } from 'src/attendance/attendance.entity';
export declare class LeaveService {
    private leaveRequestRepository;
    private leaveBalanceRepository;
    private userRepository;
    private attendanceRepository;
    private notificationsService;
    private MAX_DEPT_CONCURRENT;
    constructor(leaveRequestRepository: Repository<LeaveRequest>, leaveBalanceRepository: Repository<LeaveBalance>, userRepository: Repository<User>, attendanceRepository: Repository<Attendance>, notificationsService: NotificationsService);
    getUserRequests(userId: number, query: PaginationQueryDto): Promise<{
        data: LeaveRequest[];
        total: number;
    }>;
    getUserBalances(userId: number): Promise<LeaveBalance[]>;
    getAllRequests(query: PaginationQueryDto): Promise<{
        data: LeaveRequest[];
        total: number;
    }>;
    createRequest(userId: number, dto: CreateLeaveRequestDto): Promise<LeaveRequest>;
    approveRequest(requestId: number, hrAdminId: number): Promise<LeaveRequest>;
    rejectRequest(requestId: number, hrAdminId: number, reason?: string): Promise<LeaveRequest>;
    cancelRequest(id: number, userId: number): Promise<LeaveRequest>;
    updateBalance(userId: number, leaveType: LeaveType, total: number): Promise<LeaveBalance>;
    assignInitialLeave(user: User): Promise<void>;
    assignInitialLeaveToUser(userId: number): Promise<void>;
    monthlyAccrual(): Promise<void>;
    private calculateDays;
}
