import type { Metadata } from "next";
import { redirect } from "next/navigation";
import { requireSession } from "@/lib/auth/session";
import { isPersonnelManager } from "@/lib/personnel/access";
import { getSubordinates } from "@/lib/personnel/queries";
import { getPendingTimeEntries } from "@/lib/time/queries";
import { getPendingAbsences } from "@/lib/absences/queries";
import { getAbsenceTypes } from "@/lib/settings";
import { PageHeader } from "@/components/ui/PageHeader";
import { PersonnelManager } from "./PersonnelManager";

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

export default async function PersonnelPage() {
  const session = await requireSession();
  const perms = session.user.permissions ?? [];
  const uid = session.user.id;

  if (!(await isPersonnelManager(uid, perms))) redirect("/dashboard");

  const [subordinates, pendingTime, pendingAbs, absenceTypes] = await Promise.all([
    getSubordinates(uid),
    perms.includes("time.approve") ? getPendingTimeEntries() : getPendingTimeEntries(uid),
    perms.includes("absences.approve") ? getPendingAbsences() : getPendingAbsences(uid),
    getAbsenceTypes(),
  ]);

  return (
    <div className="flex flex-col gap-5">
      <PageHeader
        eyebrow="Personalverwaltung"
        title="Mein Team"
        description="Mitarbeitende einsehen sowie Arbeitszeit- und Abwesenheitsanträge freigeben."
      />
      <PersonnelManager
        subordinates={subordinates}
        pendingTime={pendingTime}
        pendingAbs={pendingAbs}
        absenceTypes={absenceTypes}
      />
    </div>
  );
}
