import type { Metadata } from "next";
import { requirePermission } from "@/lib/auth/session";
import { getMyAbsences, getVacationUsed } from "@/lib/absences/queries";
import { getAbsenceTypes } from "@/lib/settings";
import { prisma } from "@/lib/prisma";
import { PageHeader } from "@/components/ui/PageHeader";
import { AbsencesManager } from "./AbsencesManager";

export const metadata: Metadata = { title: "Abwesenheiten" };

export default async function AbsencesPage() {
  const session = await requirePermission("absences.view");

  const [mine, vacationUsed, types, me] = await Promise.all([
    getMyAbsences(session.user.id),
    getVacationUsed(session.user.id),
    getAbsenceTypes(),
    prisma.user.findUnique({
      where: { id: session.user.id },
      select: { vacationDaysPerYear: true, supervisor: { select: { name: true, displayName: true } } },
    }),
  ]);

  return (
    <div className="flex flex-col gap-5">
      <PageHeader
        eyebrow="Planung"
        title="Urlaub & Abwesenheiten"
        description="Abwesenheiten beantragen und den Status verfolgen. Anträge gehen an deine zuständige Person."
      />
      <AbsencesManager
        mine={mine}
        types={types}
        vacationUsed={vacationUsed}
        vacationTotal={me?.vacationDaysPerYear ?? 30}
        supervisorName={me?.supervisor ? me.supervisor.displayName ?? me.supervisor.name : null}
      />
    </div>
  );
}
