import { getAulaContext } from "@/lib/data/aula-context";
import AulaSelector from "@/components/dashboard/AulaSelector";
import SubmissionTable from "@/components/dashboard/SubmissionTable";
import SystemAlert from "@/components/ui/SystemAlert";
import DashboardBreadcrumbs from "@/components/dashboard/DashboardBreadcrumbs";
import { Suspense } from "react";
import { notFound } from "next/navigation";
import Loading from "@/components/ui/Loading";
import { requireUser } from "@/lib/auth/session";
import { getSeguimientoTareas } from "@/lib/data/tareas";

type Props = { searchParams: Promise<{ aula?: string }> };
export default function TareasPage({ searchParams }: Props) {
  return (
    <Suspense fallback={<Loading />}>
      <TareasContent searchParams={searchParams} />
    </Suspense>
  );
}

async function TareasContent({ searchParams }: Props) {
  if ((await requireUser()).role !== "instructor") notFound();
  const { aula: active, aulas } = await getAulaContext();
  const requested = (await searchParams).aula;
  const aula = requested ? aulas.find((a) => String(a.aul_id) === requested) : active;
  if (requested && !aula) notFound();
  const tareas = aula
    ? await getSeguimientoTareas(aula.aul_id)
    : { estado: "disponible" as const, filas: [] };
  return (
    <section className="space-y-4 p-4">
      <DashboardBreadcrumbs items={[{ label: "Inicio", href: "/" }, { label: "Tareas" }]} />
      <h1 className="text-2xl font-semibold">Tareas</h1>
      <p className="text-sm text-zinc-500">
        Consulta las entregas, calificaciones y alumnos que aún no han cumplido con sus tareas.
      </p>
      {aula && (
        <AulaSelector
          syncOnly
          syncOnMount={!!requested}
          selected={aula.aul_id}
          aulas={aulas.map((a) => ({
            id: a.aul_id,
            nombre: a.aul_curso_nombre || "Curso",
            clave: a.aul_clave_registro || "",
          }))}
        />
      )}
      {tareas.estado !== "disponible" ? (
        <SystemAlert status="warning" title="Entregas no disponibles">
          No fue posible consultar las tareas. Inténtalo de nuevo más tarde.
        </SystemAlert>
      ) : tareas.filas.length === 0 ? (
        <SystemAlert title="Sin tareas para mostrar">
          No hay tareas habilitadas o alumnos inscritos en el aula activa.
        </SystemAlert>
      ) : (
        <SubmissionTable tareas={tareas.filas} />
      )}
    </section>
  );
}
