// app/admin/layout.tsx
// Admin layout shell with REAL signed-session auth wiring (agent E).
//
// Auth model: the HMAC-signed session cookie is read by getSession(). When there
// is NO session, the layout renders a bare passthrough (no admin chrome) so the
// /admin/login page can render without a redirect loop. Every gated page and API
// route independently calls requireRole(...) for defense in depth, so a missing
// chrome never means a missing gate. When there IS a session, the layout renders
// the nav + the signed-in identity + a logout control.
//
// The back office is never indexed and never embeddable (admin.md section 3).

import * as React from "react";
import Link from "next/link";
import { getSession } from "@/lib/auth";
import { logoutAction } from "@/app/admin/_lib/actions";

export const metadata = {
  robots: { index: false, follow: false },
};

export default async function AdminLayout({
  children,
}: Readonly<{ children: React.ReactNode }>) {
  const session = await getSession();

  // No session: render children bare. The login page lives here and must render
  // without the gated chrome; gated pages self-guard with requireRole and will
  // redirect to /admin/login themselves.
  if (!session) {
    return <div className="min-h-full bg-canvas text-ink-strong">{children}</div>;
  }

  return (
    <div className="flex min-h-full flex-col bg-canvas text-ink-strong">
      <header className="border-b border-hairline">
        <div className="mx-auto flex max-w-[1200px] flex-wrap items-center gap-6 px-5 py-4">
          <span className="font-impact text-heading-md font-bold text-primary">
            Admin Rifa
          </span>
          <nav
            aria-label="Navegación de administración"
            className="flex flex-wrap gap-5"
          >
            <Link
              href="/admin"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Panel
            </Link>
            <Link
              href="/admin/participantes"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Participantes
            </Link>
            <Link
              href="/admin/transacciones"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Transacciones
            </Link>
            <Link
              href="/admin/conciliacion"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Conciliación
            </Link>
            <Link
              href="/admin/auditoria"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Auditoría
            </Link>
            <Link
              href="/admin/premios"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Premios
            </Link>
            <Link
              href="/admin/configuracion"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Configuración
            </Link>
            <Link
              href="/admin/manual"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Entrada manual
            </Link>
            <Link
              href="/admin/draw"
              className="rounded-sm font-body text-body-md text-ink-strong hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
            >
              Sorteo
            </Link>
          </nav>
          <div className="ml-auto flex items-center gap-4">
            <span className="font-body text-caption text-muted">
              {session.email} ({roleLabel(session.role)})
            </span>
            <form action={logoutAction}>
              <button
                type="submit"
                className="min-h-11 rounded-md border border-hairline px-4 font-body text-body-md text-ink-strong hover:border-primary hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
              >
                Salir
              </button>
            </form>
          </div>
        </div>
      </header>
      <main className="mx-auto w-full max-w-[1200px] flex-1 px-5 py-8">
        {children}
      </main>
    </div>
  );
}

function roleLabel(role: string): string {
  switch (role) {
    case "viewer":
      return "lectura";
    case "operator":
      return "operador";
    case "draw_officer":
      return "oficial de sorteo";
    case "admin":
      return "administrador";
    default:
      return role;
  }
}
