import { redirect } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { RejectionReason } from "@/models/RejectionReason";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { NewRejectionReasonForm } from "@/components/admin/NewRejectionReasonForm";
import { RejectionReasonActiveToggle } from "@/components/admin/RejectionReasonActiveToggle";
import { DeleteRejectionReasonButton } from "@/components/admin/DeleteRejectionReasonButton";

export const dynamic = "force-dynamic";

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

  if (!(await hasPermission("rejection_reasons_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();

  await connectDB();
  const reasons = await RejectionReason.find({}).sort({ sortOrder: 1 }).lean();

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Ablehnungsgründe"
        subtitle="Diese Gründe stehen zur Auswahl, wenn du einen Auftrag ablehnst — sie werden in den Statistiken ausgewertet. Inaktive Gründe bleiben erhalten, tauchen aber nicht mehr in der Auswahl auf."
      />

      <NewRejectionReasonForm />

      <div className="flex flex-col gap-3 mt-6">
        {reasons.map((r) => (
          <div
            key={String(r._id)}
            className="bg-[var(--rk-surface)] border border-white/10 rounded-2xl p-5 flex items-center justify-between gap-3 flex-wrap"
          >
            <p className={`text-sm ${r.active ? "text-[var(--rk-ink)]" : "opacity-40 line-through"}`}>{r.label}</p>
            <div className="flex items-center gap-3">
              <RejectionReasonActiveToggle id={String(r._id)} active={r.active} />
              <DeleteRejectionReasonButton id={String(r._id)} />
            </div>
          </div>
        ))}
        {reasons.length === 0 && <AdminEmptyState message="Noch keine Gründe angelegt." />}
      </div>
    </main>
  );
}
