// app/api/auth/initial-register/route.ts
import { NextResponse } from "next/server";
import bcrypt from "bcrypt";
import { prisma } from "@/lib/prisma";

export async function POST(request: Request) {
  console.log("🚀 API inicial-register ejecutándose...");

  try {
    // 1. Verificar usuarios existentes
    console.log("📊 Verificando usuarios existentes...");
    const userCount = await prisma.user.count();
    console.log(`👥 Usuarios encontrados: ${userCount}`);

    if (userCount > 0) {
      console.log("❌ Ya existen usuarios");
      return NextResponse.json(
        {
          success: false,
          message: "Ya existen usuarios en el sistema. Use el login normal.",
        },
        { status: 400 }
      );
    }

    // 2. Leer el body
    console.log("📖 Leyendo body de la petición...");
    const body = await request.json();
    console.log("📦 Body recibido:", JSON.stringify(body, null, 2));

    const { name, username, password } = body;

    // 3. Validaciones
    if (!username || !password) {
      console.log("❌ Faltan campos obligatorios");
      return NextResponse.json(
        {
          success: false,
          message: "Usuario y contraseña son obligatorios.",
        },
        { status: 400 }
      );
    }

    if (password.length < 6) {
      console.log("❌ Contraseña muy corta");
      return NextResponse.json(
        {
          success: false,
          message: "La contraseña debe tener al menos 6 caracteres.",
        },
        { status: 400 }
      );
    }

    if (username.length < 3) {
      console.log("❌ Usuario muy corto");
      return NextResponse.json(
        {
          success: false,
          message: "El usuario debe tener al menos 3 caracteres.",
        },
        { status: 400 }
      );
    }

    // 4. Hashear contraseña
    console.log("🔐 Hasheando contraseña...");
    const passwordHash = await bcrypt.hash(password, 10);

    // 5. Crear usuario
    console.log("👤 Creando administrador...");
    const newUser = await prisma.user.create({
      data: {
        name: name || username,
        username: username.toLowerCase().trim(),
        passwordHash,
        role: "ADMIN",
      },
    });

    console.log("✅ Usuario creado:", newUser.username);

    // 6. Respuesta exitosa
    const { passwordHash: _, ...userWithoutPassword } = newUser;

    return NextResponse.json({
      success: true,
      message: "Administrador creado exitosamente",
      user: userWithoutPassword,
    });
  } catch (error: any) {
    console.error("💥 ERROR EN API:", error);
    console.error("Stack:", error.stack);

    // Errores específicos de Prisma
    if (error.code === "P2002") {
      return NextResponse.json(
        {
          success: false,
          message: "El nombre de usuario ya está en uso.",
        },
        { status: 400 }
      );
    }

    return NextResponse.json(
      {
        success: false,
        message: "Error al registrar el administrador.",
        error: error.message,
      },
      { status: 500 }
    );
  }
}
