import { PrismaClient } from "@prisma/client";
import bcrypt from "bcryptjs";

const prisma = new PrismaClient();

async function main() {
  console.log("Iniciando Seed de la Base de Datos...");

  // 1. Limpiar la BD para empezar fresco (Opcional, en cascada no funciona así directamente con Prisma pero se puede vaciar)
  await prisma.inscripcion.deleteMany({});
  await prisma.curso.deleteMany({});
  await prisma.user.deleteMany({});
  await prisma.colegio.deleteMany({});

  // 2. Crear dos Colegios
  const colegioA = await prisma.colegio.create({
    data: {
      nombre: "Sede Centro Nirgua",
      whatsapp: "584141234567",
      email: "centro@cursosnirgua.com",
    },
  });

  const colegioB = await prisma.colegio.create({
    data: {
      nombre: "Sede Norte Nirgua",
      whatsapp: "584129876543",
      email: "norte@cursosnirgua.com",
    },
  });

  // 3. Crear Usuarios Administradores y Estudiantes
  const hashedPass = await bcrypt.hash("admin123", 10);
  
  // Super Admin
  await prisma.user.create({
    data: {
      email: "superadmin@cursos.com",
      password: hashedPass,
      name: "Juan Perez (Super Admin)",
      role: "SUPERADMIN",
    },
  });

  // Admin Colegio A
  await prisma.user.create({
    data: {
      email: "admin_centro@cursos.com",
      password: hashedPass,
      name: "Maria Centro",
      role: "ADMIN_COLEGIO",
      colegioId: colegioA.id,
    },
  });

  // Estudiante 
  const estudiante = await prisma.user.create({
    data: {
      email: "estudiante@ejemplo.com",
      password: await bcrypt.hash("estudiante123", 10),
      name: "Pedro Alumno",
      role: "ESTUDIANTE",
    },
  });

  // 4. Crear Cursos Reales desde las imágenes aportadas
  const cursosData = [
    // COMERCIAL
    { categoria: "ÁREA COMERCIAL", titulo: "Programación" },
    { categoria: "ÁREA COMERCIAL", titulo: "Marketing Digital" },
    { categoria: "ÁREA COMERCIAL", titulo: "Computación (Básica/Avanzado)" },
    { categoria: "ÁREA COMERCIAL", titulo: "Excel (Básico/Avanzado)" },
    { categoria: "ÁREA COMERCIAL", titulo: "Creación de Contenido para Redes Sociales" },
    { categoria: "ÁREA COMERCIAL", titulo: "Inglés (Básico/Intermedio/Avanzado)" },
    { categoria: "ÁREA COMERCIAL", titulo: "Matemática, Química y Física" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente Jurídico" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente de Aduana" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente de Preescolar" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente de Farmacia" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente Administrativo" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente de Contabilidad" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente de Mercadeo y Ventas" },
    { categoria: "ÁREA COMERCIAL", titulo: "Asistente de Recursos Humanos" },
    
    // ARTESANAL
    { categoria: "ÁREA ARTESANAL", titulo: "Ajedrez" },
    { categoria: "ÁREA ARTESANAL", titulo: "Bisutería" },
    { categoria: "ÁREA ARTESANAL", titulo: "Manualidades" },
    { categoria: "ÁREA ARTESANAL", titulo: "Cejas y Pestañas" },
    { categoria: "ÁREA ARTESANAL", titulo: "Sistema de Uñas" },
    { categoria: "ÁREA ARTESANAL", titulo: "Manicure y Pedicure" },
    { categoria: "ÁREA ARTESANAL", titulo: "Peluquería (Básico / Avanzado)" },
    { categoria: "ÁREA ARTESANAL", titulo: "Barbería (Básico / Avanzado)" },
    { categoria: "ÁREA ARTESANAL", titulo: "Maquillaje (Básico / Avanzado)" },
    { categoria: "ÁREA ARTESANAL", titulo: "Corte y Confección" },
    { categoria: "ÁREA ARTESANAL", titulo: "Confección de Traje de Baños" },
    
    // INDUSTRIAL
    { categoria: "ÁREA INDUSTRIAL", titulo: "Robótica" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Electro-Auto" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Seguridad Industrial" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Mecánica de Motos" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Mecánica Diesel" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Mecánica Automotriz" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Electrónica (Básica / Avanzada)" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Reparación de Tarjetas Electrónicas" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Reparación de Celulares" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Electricidad (Básica / Industrial)" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Refrigeración (Básica / Avanzada)" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Refrigeración Automotriz" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Reparación de Computadoras" },
    { categoria: "ÁREA INDUSTRIAL", titulo: "Reparación de Electrodomésticos" },
    
    // GERENCIAL
    { categoria: "ÁREA GERENCIAL", titulo: "Planificación Estratégica" },
    { categoria: "ÁREA GERENCIAL", titulo: "Indicadores de Gestión" },
    { categoria: "ÁREA GERENCIAL", titulo: "Trabajo en Equipo" },
    { categoria: "ÁREA GERENCIAL", titulo: "Gestión Efectiva del Tiempo" },
    { categoria: "ÁREA GERENCIAL", titulo: "Liderazgo" },
    { categoria: "ÁREA GERENCIAL", titulo: "Oratoría" },
    { categoria: "ÁREA GERENCIAL", titulo: "Resolución de Conflictos" },
  ];

  const addedCourses = [];
  for (const c of cursosData) {
    const nuevoCurso = await prisma.curso.create({
      data: {
        colegioId: colegioA.id,
        titulo: c.titulo,
        categoria: c.categoria,
        precio: Math.floor(Math.random() * 50) + 20, // Precio aleatorio entre $20 y $70 por ahora
        fechaInicio: new Date("2026-05-01"),
        matriculaMax: 20,
      }
    });
    addedCourses.push(nuevoCurso);
  }

  // 5. Crear inscripción de prueba al primer curso comercial
  await prisma.inscripcion.create({
    data: {
      userId: estudiante.id,
      cursoId: addedCourses[0].id,
      estadoPago: "APROBADO",
    },
  });

  console.log("¡Seeding completado con Éxito!");
  console.log("Credenciales Generadas:");
  console.log(" - Superadmin: superadmin@cursos.com / admin123");
  console.log(" - Admin Centro: admin_centro@cursos.com / admin123");
  console.log(" - Estudiante: estudiante@ejemplo.com / estudiante123");
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
