/**
 * prisma/seed.js
 * Populates the database with the original mock data.
 * Run with:  npx prisma db seed
 */

const { PrismaClient } = require('@prisma/client');
const bcrypt = require('bcrypt');

const prisma = new PrismaClient();

async function main() {
  console.log('🌱 Seeding database…');

  // ── 1. Users ────────────────────────────────
  const hashedPassword = await bcrypt.hash('1234', 10);

  await prisma.user.upsert({
    where: { email: 'admin@empresa.com' },
    update: {},
    create: {
      email:    'admin@empresa.com',
      password: hashedPassword,
      name:     'Ana Villegas',
      role:     'Administrador',
    },
  });
  console.log('✅ Users seeded');

  // ── 2. Companies ─────────────────────────────
  const companiesData = [
    { id: 1,  rut: '76.111.222-3', name: 'Constructora XYZ Ltda.',                              status: 'active',   registered: new Date('2022-01-15') },
    { id: 2,  rut: '77.222.333-4', name: 'Servicios de Limpieza CleanFast',                     status: 'active',   registered: new Date('2021-11-30') },
    { id: 3,  rut: '78.333.444-5', name: 'Transportes del Sur S.A.',                            status: 'inactive', registered: new Date('2020-05-20') },
    { id: 4,  rut: '79.444.555-6', name: 'Comercializadora de Alimentos S.p.A.',                status: 'active',   registered: new Date('2023-03-10') },
    { id: 5,  rut: '80.555.666-7', name: 'Servicios de Seguridad ProSafe Ltda.',                status: 'inactive', registered: new Date('2019-08-25') },
    { id: 6,  rut: '81.666.777-8', name: 'Mantenimiento Industrial Mantech S.A.',               status: 'active',   registered: new Date('2022-12-05') },
    { id: 7,  rut: '82.777.888-9', name: 'Consultora de Recursos Humanos RH Solutions',         status: 'active',   registered: new Date('2021-07-18') },
    { id: 8,  rut: '83.888.999-0', name: 'Empresa de Servicios Generales ServiPlus',            status: 'inactive', registered: new Date('2020-02-14') },
    { id: 9,  rut: '84.999.000-1', name: 'Constructora e Inmobiliaria Edifica S.A.',            status: 'active',   registered: new Date('2023-01-22') },
    { id: 10, rut: '85.000.111-2', name: 'Servicios de Alimentación y Catering Foodies Ltda.', status: 'active',   registered: new Date('2021-09-30') },
  ];

  for (const c of companiesData) {
    await prisma.company.upsert({
      where: { id: c.id },
      update: {},
      create: c,
    });
  }
  console.log('✅ Companies seeded');

  // ── 3. Locales ───────────────────────────────
  const localesData = [
    // Empresa 1: Constructora XYZ
    { id: 'XYZ-C1', companyId: 1,  name: 'Casa Matriz Stgo',         region: 'Región Metropolitana', direccion: 'Av. Las Condes 10500, Santiago' },
    { id: 'XYZ-O1', companyId: 1,  name: 'Obra Norte',               region: 'Antofagasta',          direccion: 'Ruta 5 Norte Km 1350, Sierra Gorda' },
    // Empresa 2: CleanFast
    { id: 'CF-C1',  companyId: 2,  name: 'Oficina Central',          region: 'Región Metropolitana', direccion: 'Providencia 1234, Santiago' },
    { id: 'CF-V1',  companyId: 2,  name: 'Sucursal Viña',            region: 'Valparaíso',           direccion: 'Calle Valparaíso 450, Viña del Mar' },
    // Empresa 3: Transportes del Sur
    { id: 'TS-S1',  companyId: 3,  name: 'Terminal Sur',             region: 'Los Lagos',            direccion: 'Ruta 5 Sur Km 1020, Puerto Montt' },
    { id: 'TS-C1',  companyId: 3,  name: 'Centro Logístico',         region: 'Región Metropolitana', direccion: 'Américo Vespucio 1500, Quilicura' },
    // Empresa 4: Comercializadora
    { id: 'CA-B1',  companyId: 4,  name: 'Bodega Central',           region: 'Región Metropolitana', direccion: 'Panamericana Norte 9000, Colina' },
    { id: 'CA-S1',  companyId: 4,  name: 'Tienda Concepción',        region: 'Biobío',               direccion: 'Barros Arana 100, Concepción' },
    // Empresa 5: ProSafe
    { id: 'PS-C1',  companyId: 5,  name: 'Central Operaciones',      region: 'Región Metropolitana', direccion: 'Apoquindo 3000, Las Condes' },
    { id: 'PS-N1',  companyId: 5,  name: 'Delegación Coquimbo',      region: 'Coquimbo',             direccion: 'Av. del Mar 500, La Serena' },
    // Empresa 6: Mantech
    { id: 'MT-S1',  companyId: 6,  name: 'Taller Coronel',           region: 'Biobío',               direccion: 'Parque Industrial Coronel, Lote 5' },
    { id: 'MT-N1',  companyId: 6,  name: 'Base Calama',              region: 'Antofagasta',          direccion: 'Barrio Industrial 200, Calama' },
    // Empresa 7: RH Solutions
    { id: 'RH-C1',  companyId: 7,  name: 'Casa Matriz',              region: 'Región Metropolitana', direccion: 'Nueva Providencia 1881, Santiago' },
    { id: 'RH-R1',  companyId: 7,  name: 'Sucursal Rancagua',        region: "O'Higgins",            direccion: 'San Martín 400, Rancagua' },
    // Empresa 8: ServiPlus
    { id: 'SP-R1',  companyId: 8,  name: 'Operación Rancagua',       region: "O'Higgins",            direccion: 'Carretera El Cobre Km 4, Rancagua' },
    { id: 'SP-C1',  companyId: 8,  name: 'Base RM',                  region: 'Región Metropolitana', direccion: 'San Diego 1000, Santiago' },
    // Empresa 9: Edifica
    { id: 'ED-I1',  companyId: 9,  name: 'Proyecto Serena Golf',     region: 'Coquimbo',             direccion: 'Ruta 5 Norte Km 480, La Serena' },
    { id: 'ED-C1',  companyId: 9,  name: 'Oficina Central',          region: 'Región Metropolitana', direccion: 'Vitacura 5000, Vitacura' },
    // Empresa 10: Foodies
    { id: 'FO-C1',  companyId: 10, name: 'Cocina Central Stgo',      region: 'Región Metropolitana', direccion: 'Vicuña Mackenna 200, Santiago' },
    { id: 'FO-V1',  companyId: 10, name: 'Casino U. de Valparaíso',  region: 'Valparaíso',           direccion: 'Errazuriz 1100, Valparaíso' },
  ];

  for (const l of localesData) {
    await prisma.local.upsert({
      where: { id: l.id },
      update: {},
      create: l,
    });
  }
  console.log('✅ Locales seeded');

  // ── 4. Employees ─────────────────────────────
  const employeesData = [
    // Empresa 1
    { id: 1,  companyId: 1,  rut: '15.482.910-3', name: 'Carlos Vega',   cargo: 'Jefe de Obra',    jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Antofagasta',          localId: 'XYZ-O1', est: null },
    { id: 2,  companyId: 1,  rut: '18.293.441-K', name: 'Luis Pérez',    cargo: 'Obrero',           jornada: 'Por turnos',  turno: 'L-S 08:00 a 16:00',   region: 'Antofagasta',          localId: 'XYZ-O1', est: 'EST Services Ltda.' },
    { id: 3,  companyId: 1,  rut: '21.503.229-7', name: 'Ana Silva',     cargo: 'Prevencionista',   jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Antofagasta',          localId: 'XYZ-O1', est: null },
    { id: 4,  companyId: 1,  rut: '12.833.912-1', name: 'Marta Ríos',    cargo: 'Administrativa',   jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'XYZ-C1', est: null },
    { id: 5,  companyId: 1,  rut: '14.102.833-4', name: 'Jorge Nilo',    cargo: 'Gerente General',  jornada: 'Art 22',      turno: 'Sin límite',           region: 'Región Metropolitana', localId: 'XYZ-C1', est: null },
    // Empresa 2
    { id: 6,  companyId: 2,  rut: '19.382.110-5', name: 'María López',   cargo: 'Aseadora',         jornada: 'Por turnos',  turno: 'L-S 07:00 a 15:00',   region: 'Valparaíso',           localId: 'CF-V1',  est: null },
    { id: 7,  companyId: 2,  rut: '16.551.029-2', name: 'Pedro Lara',    cargo: 'Supervisor',       jornada: 'Por turnos',  turno: 'L-S 07:00 a 15:00',   region: 'Valparaíso',           localId: 'CF-V1',  est: null },
    { id: 8,  companyId: 2,  rut: '13.992.441-8', name: 'Laura Gómez',   cargo: 'Aseadora',         jornada: 'Parcial',     turno: 'S-D 08:00 a 18:00',   region: 'Región Metropolitana', localId: 'CF-C1',  est: null },
    { id: 9,  companyId: 2,  rut: '20.102.993-K', name: 'Diego Soto',    cargo: 'Limpiacristales',  jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Región Metropolitana', localId: 'CF-C1',  est: null },
    { id: 10, companyId: 2,  rut: '17.482.119-0', name: 'Carmen Pino',   cargo: 'RRHH',             jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'CF-C1',  est: null },
    // Empresa 3
    { id: 11, companyId: 3,  rut: '11.823.491-6', name: 'Raúl Moya',     cargo: 'Conductor',        jornada: 'Bisemanal',   turno: '10x4',                 region: 'Los Lagos',            localId: 'TS-S1',  est: null },
    { id: 12, companyId: 3,  rut: '22.148.902-3', name: 'Hugo Vera',     cargo: 'Mecánico',         jornada: 'Por turnos',  turno: 'Noche 22:00 a 06:00', region: 'Los Lagos',            localId: 'TS-S1',  est: null },
    { id: 13, companyId: 3,  rut: '15.901.228-K', name: 'Sofia Mella',   cargo: 'Logística',        jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'TS-C1',  est: null },
    { id: 14, companyId: 3,  rut: '14.502.117-9', name: 'Tomás Díaz',    cargo: 'Operador Grúa',    jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Región Metropolitana', localId: 'TS-C1',  est: null },
    { id: 15, companyId: 3,  rut: '18.733.410-2', name: 'Elena Caro',    cargo: 'Peoneta',          jornada: 'Por turnos',  turno: 'L-S 08:00 a 15:00',   region: 'Región Metropolitana', localId: 'TS-C1',  est: 'EST Services Ltda.' },
    // Empresa 4
    { id: 16, companyId: 4,  rut: '12.441.882-7', name: 'Felipe Cid',    cargo: 'Bodeguero',        jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Región Metropolitana', localId: 'CA-B1',  est: null },
    { id: 17, companyId: 4,  rut: '23.109.445-1', name: 'Karen Ruz',     cargo: 'Vendedora',        jornada: 'Por turnos',  turno: 'Rotativo L-D',         region: 'Biobío',               localId: 'CA-S1',  est: null },
    { id: 18, companyId: 4,  rut: '19.822.314-8', name: 'Ignacio Puel',  cargo: 'Cajero',           jornada: 'Por turnos',  turno: 'Rotativo L-D',         region: 'Biobío',               localId: 'CA-S1',  est: null },
    { id: 19, companyId: 4,  rut: '16.118.903-5', name: 'Sara Mena',     cargo: 'Supervisora',      jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Biobío',               localId: 'CA-S1',  est: null },
    { id: 20, companyId: 4,  rut: '25.302.119-K', name: 'Juan Ruiz',     cargo: 'Empacador',        jornada: 'Parcial',     turno: 'S-D 10:00 a 20:00',   region: 'Región Metropolitana', localId: 'CA-B1',  est: 'EST Services Ltda.' },
    // Empresa 5
    { id: 21, companyId: 5,  rut: '13.501.229-4', name: 'Héctor Saez',   cargo: 'Guardia',          jornada: 'Excepcional', turno: '4x4',                  region: 'Coquimbo',             localId: 'PS-N1',  est: null },
    { id: 22, companyId: 5,  rut: '17.892.331-0', name: 'Paola Cruz',    cargo: 'Guardia',          jornada: 'Excepcional', turno: '4x4',                  region: 'Coquimbo',             localId: 'PS-N1',  est: null },
    { id: 23, companyId: 5,  rut: '10.293.448-9', name: 'Fabián Rey',    cargo: 'Operador CCTV',    jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Región Metropolitana', localId: 'PS-C1',  est: null },
    { id: 24, companyId: 5,  rut: '21.883.102-3', name: 'Rosa Pavez',    cargo: 'Supervisora RM',   jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'PS-C1',  est: null },
    { id: 25, companyId: 5,  rut: '14.772.910-K', name: 'Óscar Leal',    cargo: 'Guardia',          jornada: 'Por turnos',  turno: 'Noche 20:00 a 08:00', region: 'Región Metropolitana', localId: 'PS-C1',  est: null },
    // Empresa 6
    { id: 26, companyId: 6,  rut: '15.992.341-6', name: 'Víctor Paz',    cargo: 'Ingeniero',        jornada: 'Fija',        turno: 'L-V 08:30 a 18:00',   region: 'Biobío',               localId: 'MT-S1',  est: null },
    { id: 27, companyId: 6,  rut: '18.103.992-4', name: 'Julia Roa',     cargo: 'Técnico',          jornada: 'Fija',        turno: 'L-V 08:30 a 18:00',   region: 'Biobío',               localId: 'MT-S1',  est: null },
    { id: 28, companyId: 6,  rut: '12.508.113-2', name: 'Manuel Gil',    cargo: 'Soldador',         jornada: 'Excepcional', turno: '7x7',                  region: 'Antofagasta',          localId: 'MT-N1',  est: null },
    { id: 29, companyId: 6,  rut: '19.442.810-7', name: 'Diana Arce',    cargo: 'Tornero',          jornada: 'Excepcional', turno: '7x7',                  region: 'Antofagasta',          localId: 'MT-N1',  est: null },
    { id: 30, companyId: 6,  rut: '24.182.903-1', name: 'Simón Toro',    cargo: 'Ayudante',         jornada: 'Excepcional', turno: '7x7',                  region: 'Antofagasta',          localId: 'MT-N1',  est: 'EST Services Ltda.' },
    // Empresa 7
    { id: 31, companyId: 7,  rut: '16.732.118-5', name: 'Andrea Rey',    cargo: 'Reclutadora',      jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'RH-C1',  est: null },
    { id: 32, companyId: 7,  rut: '14.283.991-K', name: 'Boris Muga',    cargo: 'Psicólogo',        jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'RH-C1',  est: null },
    { id: 33, companyId: 7,  rut: '20.551.829-3', name: 'Carla Viera',   cargo: 'Asistente',        jornada: 'Parcial',     turno: 'L-V 09:00 a 13:00',   region: 'Región Metropolitana', localId: 'RH-C1',  est: null },
    { id: 34, companyId: 7,  rut: '11.932.448-0', name: 'Daniel Roa',    cargo: 'Reclutador',       jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: "O'Higgins",            localId: 'RH-R1',  est: null },
    { id: 35, companyId: 7,  rut: '18.491.223-7', name: 'Erika Lazo',    cargo: 'Ejecutiva',        jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: "O'Higgins",            localId: 'RH-R1',  est: null },
    // Empresa 8
    { id: 36, companyId: 8,  rut: '15.112.934-2', name: 'Fernando Sol',  cargo: 'Gasfiter',         jornada: 'Por turnos',  turno: 'Rotativo L-S',         region: "O'Higgins",            localId: 'SP-R1',  est: null },
    { id: 37, companyId: 8,  rut: '13.829.110-8', name: 'Gloria Cea',    cargo: 'Electricista',     jornada: 'Por turnos',  turno: 'Rotativo L-S',         region: "O'Higgins",            localId: 'SP-R1',  est: null },
    { id: 38, companyId: 8,  rut: '17.203.449-1', name: 'Hernán Pao',    cargo: 'Carpintero',       jornada: 'Fija',        turno: 'L-V 08:00 a 18:00',   region: 'Región Metropolitana', localId: 'SP-C1',  est: null },
    { id: 39, companyId: 8,  rut: '22.581.902-5', name: 'Inés Lira',     cargo: 'Despachadora',     jornada: 'Fija',        turno: 'L-V 08:00 a 18:00',   region: 'Región Metropolitana', localId: 'SP-C1',  est: null },
    { id: 40, companyId: 8,  rut: '19.114.832-K', name: 'Jaime Pino',    cargo: 'Jornal',           jornada: 'Fija',        turno: 'L-V 08:00 a 18:00',   region: 'Región Metropolitana', localId: 'SP-C1',  est: 'EST Services Ltda.' },
    // Empresa 9
    { id: 41, companyId: 9,  rut: '16.392.118-9', name: 'Karina Aros',   cargo: 'Arquitecta',       jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'ED-C1',  est: null },
    { id: 42, companyId: 9,  rut: '14.821.993-4', name: 'Lucas Caro',    cargo: 'Dibujante',        jornada: 'Fija',        turno: 'L-V 09:00 a 18:00',   region: 'Región Metropolitana', localId: 'ED-C1',  est: null },
    { id: 43, companyId: 9,  rut: '18.592.110-2', name: 'Mónica Mora',   cargo: 'Jefa Proyecto',    jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Coquimbo',             localId: 'ED-I1',  est: null },
    { id: 44, companyId: 9,  rut: '12.109.883-7', name: 'Néstor Polo',   cargo: 'Topógrafo',        jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Coquimbo',             localId: 'ED-I1',  est: null },
    { id: 45, companyId: 9,  rut: '23.491.228-5', name: 'Olga Ruiz',     cargo: 'Alarife',          jornada: 'Fija',        turno: 'L-V 08:00 a 17:00',   region: 'Coquimbo',             localId: 'ED-I1',  est: 'EST Services Ltda.' },
    // Empresa 10
    { id: 46, companyId: 10, rut: '15.823.119-0', name: 'Pablo Vaca',    cargo: 'Chef',             jornada: 'Por turnos',  turno: 'Rotativo L-D',         region: 'Región Metropolitana', localId: 'FO-C1',  est: null },
    { id: 47, companyId: 10, rut: '21.392.884-K', name: 'Quidora Sol',   cargo: 'Ayudante Cocina',  jornada: 'Por turnos',  turno: 'Rotativo L-D',         region: 'Región Metropolitana', localId: 'FO-C1',  est: null },
    { id: 48, companyId: 10, rut: '17.102.933-6', name: 'René Ossa',     cargo: 'Maestro Casino',   jornada: 'Por turnos',  turno: 'Rotativo L-S',         region: 'Valparaíso',           localId: 'FO-V1',  est: null },
    { id: 49, companyId: 10, rut: '19.551.283-1', name: 'Sandra Paz',    cargo: 'Manipuladora',     jornada: 'Por turnos',  turno: 'Rotativo L-S',         region: 'Valparaíso',           localId: 'FO-V1',  est: null },
    { id: 50, companyId: 10, rut: '26.192.338-4', name: 'Tulio Vera',    cargo: 'Repartidor',       jornada: 'Parcial',     turno: 'L-V 11:00 a 15:00',   region: 'Región Metropolitana', localId: 'FO-C1',  est: null },
  ];

  for (const e of employeesData) {
    await prisma.employee.upsert({
      where: { id: e.id },
      update: {},
      create: e,
    });
  }
  console.log('✅ Employees seeded');

  // ── 5. Marcaciones (static + dynamic last 7 days) ──
  const staticMarcaciones = [
    { hash: 'a1b2c3d4e5f67890abcdef0123456789', employeeId: 1, timestamp: new Date('2023-07-28T09:01:15'), type: 'Entrada', lat: -33.4372, lng: -70.6506 },
    { hash: 'b2c3d4e5f67890a1bcdef0123456789a', employeeId: 1, timestamp: new Date('2023-07-28T18:05:30'), type: 'Salida',  lat: -33.4372, lng: -70.6506 },
    { hash: 'c3d4e5f67890a1b2cdef0123456789ab', employeeId: 2, timestamp: new Date('2023-07-28T08:58:45'), type: 'Entrada', lat: -33.4375, lng: -70.6501 },
  ];

  // Generate last 7 days of marcaciones for all employees
  const dynamicMarcaciones = [];
  const hoy = new Date();
  const employeeIds = employeesData.map(e => e.id);

  for (let i = 0; i < 7; i++) {
    const fecha = new Date(hoy);
    fecha.setDate(fecha.getDate() - i);
    if (fecha.getDay() === 0) continue; // skip sundays
    const dateString = fecha.toISOString().split('T')[0];

    for (const empId of employeeIds) {
      const horaEntrada = 8 + Math.floor(Math.random() * 2);
      const minEntrada  = Math.floor(Math.random() * 59);
      const entradaTS   = new Date(`${dateString}T0${horaEntrada}:${String(minEntrada).padStart(2,'0')}:00`);
      const hashEntrada = Buffer.from(`ENT-${empId}-${entradaTS.toISOString()}`).toString('base64').replace(/=/g,'').toLowerCase().padEnd(32,'a').substring(0,32);

      dynamicMarcaciones.push({
        hash: `${hashEntrada}-e${empId}-d${i}`,
        employeeId: empId,
        timestamp: entradaTS,
        type: 'Entrada',
        lat: -33.4372 + (Math.random() * 0.05),
        lng: -70.6506 + (Math.random() * 0.05),
      });

      const horaSalida = 17 + Math.floor(Math.random() * 2);
      const minSalida  = Math.floor(Math.random() * 59);
      const salidaTS   = new Date(`${dateString}T${horaSalida}:${String(minSalida).padStart(2,'0')}:00`);
      const hashSalida = Buffer.from(`SAL-${empId}-${salidaTS.toISOString()}`).toString('base64').replace(/=/g,'').toLowerCase().padEnd(32,'b').substring(0,32);

      dynamicMarcaciones.push({
        hash: `${hashSalida}-s${empId}-d${i}`,
        employeeId: empId,
        timestamp: salidaTS,
        type: 'Salida',
        lat: -33.4372 + (Math.random() * 0.05),
        lng: -70.6506 + (Math.random() * 0.05),
      });
    }
  }

  const allMarcaciones = [...staticMarcaciones, ...dynamicMarcaciones];
  let marcacionesCreated = 0;
  for (const m of allMarcaciones) {
    await prisma.marcacion.upsert({
      where: { hash: m.hash },
      update: {},
      create: m,
    });
    marcacionesCreated++;
  }
  console.log(`✅ ${marcacionesCreated} Marcaciones seeded`);

  // ── 6. Incidentes ────────────────────────────
  const incidentesData = [
    {
      start: new Date('2023-07-15T10:00:00'),
      end:   new Date('2023-07-15T10:30:00'),
      description: 'Caída parcial del servicio de marcación en Bodega Central.',
    },
    {
      start: new Date('2024-01-20T08:00:00'),
      end:   new Date('2024-01-20T09:15:00'),
      description: 'Intermitencia en el servicio de geolocalización. Se restauró manualmente.',
    },
    {
      start: new Date('2024-03-05T14:00:00'),
      end:   new Date('2024-03-05T14:45:00'),
      description: 'Error en sincronización de relojes biométricos en Sucursal Viña.',
    },
  ];

  for (const inc of incidentesData) {
    await prisma.incidente.upsert({
      where: { id: incidentesData.indexOf(inc) + 1 },
      update: {},
      create: inc,
    });
  }
  console.log('✅ Incidentes seeded');


  // ── 7. Festivos (Chile 2023-2026) ────────────
  const festivosData = [
    // 2023
    { fecha: new Date('2023-01-01'), descripcion: 'Año Nuevo',                          anio: 2023, irrenunciable: true  },
    { fecha: new Date('2023-04-07'), descripcion: 'Viernes Santo',                      anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-04-08'), descripcion: 'Sábado Santo',                       anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-05-01'), descripcion: 'Día del Trabajo',                    anio: 2023, irrenunciable: true  },
    { fecha: new Date('2023-05-21'), descripcion: 'Día de las Glorias Navales',         anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-06-21'), descripcion: 'Día de los Pueblos Indígenas',       anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-06-26'), descripcion: 'San Pedro y San Pablo',              anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-07-16'), descripcion: 'Virgen del Carmen',                  anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-08-15'), descripcion: 'Asunción de la Virgen',              anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-09-18'), descripcion: 'Fiestas Patrias',                    anio: 2023, irrenunciable: true  },
    { fecha: new Date('2023-09-19'), descripcion: 'Día de las Glorias del Ejército',   anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-10-09'), descripcion: 'Día del Encuentro de Dos Mundos',   anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-10-27'), descripcion: 'Día de las Iglesias Evangélicas',   anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-11-01'), descripcion: 'Día de Todos los Santos',            anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-12-08'), descripcion: 'Inmaculada Concepción',              anio: 2023, irrenunciable: false },
    { fecha: new Date('2023-12-25'), descripcion: 'Navidad',                            anio: 2023, irrenunciable: true  },
    // 2024
    { fecha: new Date('2024-01-01'), descripcion: 'Año Nuevo',                          anio: 2024, irrenunciable: true  },
    { fecha: new Date('2024-03-29'), descripcion: 'Viernes Santo',                      anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-03-30'), descripcion: 'Sábado Santo',                       anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-05-01'), descripcion: 'Día del Trabajo',                    anio: 2024, irrenunciable: true  },
    { fecha: new Date('2024-05-21'), descripcion: 'Día de las Glorias Navales',         anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-06-20'), descripcion: 'Día de los Pueblos Indígenas',       anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-06-29'), descripcion: 'San Pedro y San Pablo',              anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-07-16'), descripcion: 'Virgen del Carmen',                  anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-08-15'), descripcion: 'Asunción de la Virgen',              anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-09-18'), descripcion: 'Fiestas Patrias',                    anio: 2024, irrenunciable: true  },
    { fecha: new Date('2024-09-19'), descripcion: 'Día de las Glorias del Ejército',   anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-09-20'), descripcion: 'Feriado Adicional (Decreto)',        anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-10-12'), descripcion: 'Día del Encuentro de Dos Mundos',   anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-10-27'), descripcion: 'Día de las Iglesias Evangélicas',   anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-11-01'), descripcion: 'Día de Todos los Santos',            anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-12-08'), descripcion: 'Inmaculada Concepción',              anio: 2024, irrenunciable: false },
    { fecha: new Date('2024-12-25'), descripcion: 'Navidad',                            anio: 2024, irrenunciable: true  },
    // 2025
    { fecha: new Date('2025-01-01'), descripcion: 'Año Nuevo',                          anio: 2025, irrenunciable: true  },
    { fecha: new Date('2025-04-18'), descripcion: 'Viernes Santo',                      anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-04-19'), descripcion: 'Sábado Santo',                       anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-05-01'), descripcion: 'Día del Trabajo',                    anio: 2025, irrenunciable: true  },
    { fecha: new Date('2025-05-21'), descripcion: 'Día de las Glorias Navales',         anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-06-20'), descripcion: 'Día de los Pueblos Indígenas',       anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-06-29'), descripcion: 'San Pedro y San Pablo',              anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-07-16'), descripcion: 'Virgen del Carmen',                  anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-08-15'), descripcion: 'Asunción de la Virgen',              anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-09-18'), descripcion: 'Fiestas Patrias',                    anio: 2025, irrenunciable: true  },
    { fecha: new Date('2025-09-19'), descripcion: 'Día de las Glorias del Ejército',   anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-10-12'), descripcion: 'Día del Encuentro de Dos Mundos',   anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-10-26'), descripcion: 'Día de las Iglesias Evangélicas',   anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-11-01'), descripcion: 'Día de Todos los Santos',            anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-12-08'), descripcion: 'Inmaculada Concepción',              anio: 2025, irrenunciable: false },
    { fecha: new Date('2025-12-25'), descripcion: 'Navidad',                            anio: 2025, irrenunciable: true  },
    // 2026
    { fecha: new Date('2026-01-01'), descripcion: 'Año Nuevo',                          anio: 2026, irrenunciable: true  },
    { fecha: new Date('2026-04-03'), descripcion: 'Viernes Santo',                      anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-04-04'), descripcion: 'Sábado Santo',                       anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-05-01'), descripcion: 'Día del Trabajo',                    anio: 2026, irrenunciable: true  },
    { fecha: new Date('2026-05-21'), descripcion: 'Día de las Glorias Navales',         anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-06-21'), descripcion: 'Día de los Pueblos Indígenas',       anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-06-29'), descripcion: 'San Pedro y San Pablo',              anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-07-16'), descripcion: 'Virgen del Carmen',                  anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-08-15'), descripcion: 'Asunción de la Virgen',              anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-09-18'), descripcion: 'Fiestas Patrias',                    anio: 2026, irrenunciable: true  },
    { fecha: new Date('2026-09-19'), descripcion: 'Día de las Glorias del Ejército',   anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-10-12'), descripcion: 'Día del Encuentro de Dos Mundos',   anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-10-25'), descripcion: 'Día de las Iglesias Evangélicas',   anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-11-01'), descripcion: 'Día de Todos los Santos',            anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-12-08'), descripcion: 'Inmaculada Concepción',              anio: 2026, irrenunciable: false },
    { fecha: new Date('2026-12-25'), descripcion: 'Navidad',                            anio: 2026, irrenunciable: true  },
  ];

  for (const f of festivosData) {
    await prisma.festivo.upsert({
      where: { fecha: f.fecha },
      update: { descripcion: f.descripcion, irrenunciable: f.irrenunciable },
      create: f,
    });
  }
  console.log(`✅ ${festivosData.length} Festivos seeded (2023-2026)`);

  console.log('\n🎉 Database seeded successfully!');
  console.log('   Demo credentials: admin@empresa.com / 1234');
}

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