import { Prisma } from "@prisma/client";
import { NextResponse } from "next/server";
import { requireAdminApiUser } from "@/lib/auth/admin";
import { saveStrategicDiagnosticData } from "@/lib/strategic-diagnostic/server";

function isSchemaNotReadyError(error: unknown) {
  return error instanceof Prisma.PrismaClientKnownRequestError && (error.code === "P2021" || error.code === "P2022");
}

export async function POST(request: Request) {
  const user = await requireAdminApiUser();

  if (!user) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  try {
    const body = (await request.json()) as Record<string, unknown>;
    const payload = await saveStrategicDiagnosticData(user.id, body.data, {
      forceCompleted: body.forceCompleted === true,
    });

    if (!payload) {
      return NextResponse.json({ error: "No existe un perfil organizacional para este usuario." }, { status: 400 });
    }

    return NextResponse.json({ ok: true, payload });
  } catch (error) {
    if (isSchemaNotReadyError(error)) {
      return NextResponse.json(
        { error: "La base de datos aun no tiene las tablas de Modulo 2. Ejecuta prisma migrate para continuar." },
        { status: 503 },
      );
    }

    return NextResponse.json({ error: "No fue posible guardar el Modulo 2." }, { status: 400 });
  }
}
