import { getServerSession } from "next-auth";
import { authOptions } from "@/lib/auth";
import { db } from "@/lib/db";
import { colegio } from "@/db/schema";
import { eq } from "drizzle-orm";
import { redirect } from "next/navigation";
import ProfesorLayoutClient from "./ProfesorLayoutClient";
import { getProfesorCursos, getProfesorConversacion } from "@/lib/mariadb-relations";

export default async function ProfesorPanel() {
  const session = await getServerSession(authOptions);
  if (!session?.user?.id) redirect("/api/auth/signin");

  const user = await db.query.user.findFirst({
    where: (u, { eq }) => eq(u.id, session.user.id),
  });

  if (!user || user.role !== "PROFESOR") redirect("/api/auth/signin");

  const cursosRaw = await getProfesorCursos(user.id);
  const cursos = cursosRaw.map((c) => ({
    ...c,
    inscripciones: c.inscripcion ?? [],
    clases: c.clase ?? [],
  }));

  let colegioDestino = null;
  if (user.colegioId) {
    colegioDestino = await db.query.colegio.findFirst({
      where: eq(colegio.id, user.colegioId),
      columns: { id: true, nombre: true },
    });
  } else if (cursos.length > 0) {
    colegioDestino = cursos[0].colegio;
  }

  let conversacion = null;
  if (colegioDestino) {
    const conversacionDb = await getProfesorConversacion(colegioDestino.id, user.id);
    conversacion = conversacionDb
      ? { ...conversacionDb, mensajes: conversacionDb.chatmensaje ?? [] }
      : null;
  }

  return (
    <ProfesorLayoutClient
      user={user}
      cursos={cursos}
      colegioDestino={colegioDestino}
      conversacion={conversacion}
    />
  );
}
