export interface OnLeaveEmployee {
  id: string;
  employee: {
    employee_id: string;
    staff_id?: string;
    firstname?: string;
    lastname?: string;
    branch?: string;
    position?: string;
  };
  leave_type: {
    name: string;
    code: string;
    color_code?: string | null;
  };
  start_date: string;
  end_date: string;
  total_days: number;
  days_remaining: number;
  status: string;
}

export interface OnLeaveFilters {
  date?: string;
  date_from?: string;
  date_to?: string;
  branch_id?: string;
  leave_type_id?: string;
}

export interface OnLeaveResponse {
  date: string;
  data: OnLeaveEmployee[];
}

export interface LeaveSummaryReport {
  filters_applied: {
    year: number;
    branch_id?: string | null;
    department_id?: string | null;
    leave_type_id?: string | null;
    date_from?: string | null;
    date_to?: string | null;
  };
  summary: {
    total_requests: number;
    approved: number;
    rejected: number;
    pending: number;
    cancelled: number;
    total_days_taken: number;
  };
  by_leave_type: Array<{
    leave_type: string;
    color_code?: string | null;
    requests: number;
    days: number;
    employees: number;
  }>;
  by_branch: Array<{
    branch: string;
    requests: number;
    days: number;
  }>;
  by_month: Array<{
    month: string;
    requests: number;
    days: number;
  }>;
}

export interface LeaveSummaryFilters {
  year?: number;
  branch_id?: string;
  department_id?: string;
  leave_type_id?: string;
  date_from?: string;
  date_to?: string;
}

export interface IndividualLeaveReport {
  employee: {
    employee_id: string;
    staff_id?: string;
    firstname?: string;
    lastname?: string;
    branch?: string;
    position?: string;
  };
  year: number;
  balances: Array<{
    leave_type: string;
    code?: string;
    color_code?: string | null;
    entitled: number;
    carried: number;
    adjustment: number;
    used: number;
    pending: number;
    available: number;
  }>;
  requests: Array<{
    id: string;
    leave_type: string;
    code?: string;
    color_code?: string | null;
    start_date: string;
    end_date: string;
    days: number;
    status: string;
    applied_at?: string;
  }>;
}

export interface LeavePlanRow {
  employee: {
    employee_id: string;
    staff_id?: string;
    firstname?: string;
    lastname?: string;
    branch?: string;
    department?: string;
  };
  months: Record<string, { approved: number; pending: number; total: number }>;
  totals: { approved: number; pending: number; total: number };
}

export interface LeavePlanReport {
  year: number;
  months: Array<{ month: number; label: string }>;
  rows: LeavePlanRow[];
  summary: Array<{ month: number; approved: number; pending: number; total: number }>;
}

export interface LeavePlanFilters {
  year?: number;
  branch_id?: string;
  department_id?: string;
}

export interface LeaveReportExportPayload {
  report_type: 'summary' | 'individual' | 'on_leave' | 'leave_plan';
  format: 'csv' | 'xlsx';
  year?: number;
  branch_id?: string;
  department_id?: string;
  leave_type_id?: string;
  date_from?: string;
  date_to?: string;
  employee_id?: string;
  date?: string;
}
