import { AdminRowActions } from "@/admin/components/AdminRowActions";
import { StaffForm } from "@/admin/components/StaffForm";
import { AdminAutoLayout } from "@/admin/layout/AdminAutoLayout";
import { deleteStaffAction } from "@/lib/actions";
import { requireSuperAdmin } from "@/lib/auth";
import { prisma } from "@/lib/prisma";

type AdminStaffPageProps = {
  searchParams: Promise<{ error?: string; success?: string }>;
};

const errorMessages: Record<string, string> = {
  "email-exists": "This email is already used by another user.",
  required: "Please enter name, valid email, and password for new staff.",
  "self-delete": "You cannot delete your own super admin account."
};

export default async function AdminStaffPage({ searchParams }: AdminStaffPageProps) {
  await requireSuperAdmin();
  const params = await searchParams;
  const staffAccounts = await prisma.user.findMany({
    orderBy: [{ role: "asc" }, { createdAt: "desc" }],
    where: { role: { not: "USER" } }
  });

  return (
    <AdminAutoLayout
      description="Create staff accounts and assign which areas of the admin panel they can manage."
      error={params.error}
      errorMessages={errorMessages}
      eyebrow="Staff section"
      title="Staff & permissions"
      width="full"
    >
      {params.success ? <p className="admin-success-message">Staff settings saved successfully.</p> : null}

      <div className="main-layout">
        <StaffForm />

        <section className="glass-panel admin-staff-panel">
          <div className="admin-panel-heading">
            <div>
              <span className="pill">
                {staffAccounts.length} staff account{staffAccounts.length === 1 ? "" : "s"}
              </span>
              <h2>Admin & staff</h2>
            </div>
          </div>

          <div className="admin-staff-list">
            {staffAccounts.map((user) => (
              <article className="admin-staff-card" key={user.id}>
                <header className="admin-staff-card__head">
                  <span className="pill">{user.role === "ADMIN" ? "Super admin" : "Staff"}</span>
                  <h3>{user.name}</h3>
                  <p className="muted">{user.email}</p>
                  {user.bio ? <p className="muted admin-staff-card__bio">{user.bio}</p> : null}
                </header>

                {user.role === "EDITOR" ? (
                  <>
                    <StaffForm embedded user={user} />
                    <div className="admin-staff-card__actions">
                      <AdminRowActions
                        deleteAction={deleteStaffAction}
                        deleteConfirm={`Delete staff "${user.name}"? This cannot be undone.`}
                        deleteId={user.id}
                      />
                    </div>
                  </>
                ) : null}
              </article>
            ))}
            {staffAccounts.length === 0 ? <p className="admin-empty-state">No staff accounts yet.</p> : null}
          </div>
        </section>
      </div>
    </AdminAutoLayout>
  );
}
