import { Repository } from 'typeorm';
import { User } from '../users/entities/user.entity';
import { Team } from '../teams/entities/team.entity';
import { LeaveRequest } from '../leaves/entities/leave-request.entity';
import { PublicHoliday } from '../holidays/entities/public-holiday.entity';
export interface PlanningDay {
    date: string;
    is_holiday: boolean;
    holiday_label?: string;
    is_weekend: boolean;
    absences: {
        user_id: number;
        user_name: string;
        leave_type: string;
        leave_color: string;
        days_count: number;
    }[];
    presence_count: number;
    absence_count: number;
}
export interface TeamPlanning {
    team_id: number;
    team_name: string;
    min_presence: number;
    members: {
        id: number;
        matricule: string;
        first_name: string;
        last_name: string;
        work_schedule: string;
    }[];
    days: PlanningDay[];
    period: {
        start: string;
        end: string;
        view: string;
    };
}
export interface GlobalPlanningMember {
    id: number;
    matricule: string;
    first_name: string;
    last_name: string;
    team_id: number;
    team_name: string;
    work_schedule: string;
    absences: {
        date_start: string;
        date_end: string;
        leave_type: string;
        leave_color: string;
        days_count: number;
    }[];
}
export interface GlobalPlanning {
    period: {
        start: string;
        end: string;
        view: string;
    };
    holidays: {
        date: string;
        label: string;
    }[];
    members: GlobalPlanningMember[];
    stats: {
        total_members: number;
        absence_rate_by_team: {
            team_id: number;
            team_name: string;
            total_members: number;
            absent_today: number;
            rate: number;
        }[];
    };
}
export declare class PlanningService {
    private readonly userRepo;
    private readonly teamRepo;
    private readonly leaveRequestRepo;
    private readonly holidayRepo;
    constructor(userRepo: Repository<User>, teamRepo: Repository<Team>, leaveRequestRepo: Repository<LeaveRequest>, holidayRepo: Repository<PublicHoliday>);
    getTeamPlanning(teamId: number, view: 'month' | 'week', date: string): Promise<TeamPlanning>;
    private buildDays;
    private getPeriodBounds;
    checkPresenceThreshold(teamId: number, startDate: string, endDate: string): Promise<{
        ok: boolean;
        conflicts: {
            date: string;
            presence: number;
            minimum: number;
        }[];
    }>;
    getGlobalPlanning(view: 'month' | 'week', date: string, teamId?: number, search?: string, page?: number, limit?: number): Promise<GlobalPlanning & {
        total: number;
        page: number;
        limit: number;
    }>;
    checkNewRequestConflict(userId: number, startDate: string, endDate: string): Promise<{
        has_conflict: boolean;
        conflicts: {
            date: string;
            presence: number;
            minimum: number;
        }[];
        warning_message?: string;
    }>;
}
