import { redirect } from "next/navigation";
import { isAdminSession, getAllPermissions } from "@/lib/adminAuth";
import { getSessionClientId } from "@/lib/auth";
import { connectDB } from "@/lib/db";
import { Absence } from "@/models/Absence";
import { ABSENCE_TYPE_LABELS, type AbsenceType } from "@/lib/absenceConstants";
import { Client } from "@/models/Client";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { NewAbsenceForm } from "@/components/admin/NewAbsenceForm";
import { DeleteAbsenceButton } from "@/components/admin/DeleteAbsenceButton";
import { formatDateDE } from "@/lib/orderConstants";

export const dynamic = "force-dynamic";

export default async function AdminAbsencesPage() {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");

  const permissions = await getAllPermissions();
  const clientId = await getSessionClientId();

  await connectDB();
  const now = new Date();
  const from = new Date(now.getFullYear(), now.getMonth() - 1, 1);
  const [absences, staff] = await Promise.all([
    Absence.find({ endDate: { $gte: from } }).sort({ startDate: 1 }).lean(),
    Client.find({ role: "staff" }).select("name nickname firstName").lean(),
  ]);
  const staffById = new Map(staff.map((s) => [String(s._id), s]));

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Abwesenheiten"
        subtitle="Wer im Team wann Urlaub, krank oder anderweitig abwesend ist — selbst eingetragen, kein Genehmigungs-Workflow, nur ein gemeinsames Log fürs Team."
      />

      <NewAbsenceForm />

      <div className="flex flex-col gap-3">
        {absences.map((a) => {
          const person = staffById.get(String(a.clientId));
          const isOwn = clientId === String(a.clientId);
          return (
            <div
              key={String(a._id)}
              className="bg-[var(--rk-surface)] border border-white/10 rounded-2xl p-5 flex items-start justify-between gap-4"
            >
              <div className="min-w-0">
                <div className="flex items-center gap-2 flex-wrap">
                  <span className="text-sm text-[var(--rk-ink)]">{person?.nickname || person?.firstName || person?.name || "?"}</span>
                  <span className="text-xs border border-white/15 rounded-full px-2 py-0.5 text-[var(--rk-ink-muted)]">
                    {ABSENCE_TYPE_LABELS[a.type as AbsenceType]}
                  </span>
                </div>
                <p className="text-xs text-[var(--rk-ink-muted)] mt-1">
                  {formatDateDE(new Date(a.startDate))}
                  {new Date(a.startDate).toDateString() !== new Date(a.endDate).toDateString()
                    ? ` – ${formatDateDE(new Date(a.endDate))}`
                    : ""}
                </p>
                {a.note && <p className="text-sm mt-1">{a.note}</p>}
              </div>
              {(isOwn || permissions.team_management_edit) && (
                <div className="shrink-0">
                  <DeleteAbsenceButton absenceId={String(a._id)} />
                </div>
              )}
            </div>
          );
        })}
        {absences.length === 0 && <AdminEmptyState message="Keine Abwesenheiten eingetragen." />}
      </div>
    </main>
  );
}
