import type { VacationRequestStatus } from "@/lib/vacationConstants";

// Reine Berechnung, getrennt von actions/vacation.ts, damit sowohl
// Server-Actions als auch Server-Components (direkte Mongoose-Reads in
// page.tsx, wie im Rest des Personalsystems üblich) sie ohne "use server"-
// Umweg nutzen können. Restanspruch = Kontingent minus GENEHMIGTE Tage;
// beantragte (noch nicht entschiedene) Tage fließen separat als
// "pendingDays" ein, damit die UI warnen kann, ohne sie schon hart
// abzuziehen - kein Vortrag ins Folgejahr modelliert (siehe Client.ts).
export function remainingVacationDays(
  allowance: number | null,
  requestsInYear: { status: VacationRequestStatus; workDaysCount: number }[]
): { approvedDays: number; pendingDays: number; remaining: number | null } {
  const approvedDays = requestsInYear.filter((r) => r.status === "approved").reduce((sum, r) => sum + r.workDaysCount, 0);
  const pendingDays = requestsInYear.filter((r) => r.status === "requested").reduce((sum, r) => sum + r.workDaysCount, 0);
  return { approvedDays, pendingDays, remaining: allowance != null ? allowance - approvedDays : null };
}
