/**
 * Script: resend-welcome
 *
 * Genera una nueva contraseña temporal para el usuario y reenvía el correo
 * de bienvenida. Útil cuando el envío anterior falló o se perdió.
 *
 * Ejecución:
 *   cd apps/api && npx tsx scripts/resend-welcome.ts
 */
import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';
import { randomBytes } from 'crypto';
import { emailService } from '../src/services/email/email.service.js';

const prisma = new PrismaClient();

const EMAIL = 'miguel.corona@corpcyl.com';

function generateTempPassword(length = 12): string {
  const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789';
  let result = '';
  const bytes = randomBytes(length);
  for (let i = 0; i < length; i++) {
    result += chars[bytes[i] % chars.length];
  }
  return result + '!';
}

async function main() {
  const user = await prisma.user.findUnique({ where: { email: EMAIL } });
  if (!user) {
    console.error(`❌ No existe un usuario con el correo ${EMAIL}`);
    process.exit(1);
  }

  const tempPassword = generateTempPassword();
  const passwordHash = await bcrypt.hash(tempPassword, 12);

  await prisma.user.update({
    where: { id: user.id },
    data: {
      passwordHash,
      tokenVersion: { increment: 1 },
    },
  });

  console.log('⏳ Enviando correo de bienvenida a', EMAIL, '...');
  await emailService.sendWelcome(EMAIL, {
    nombre: user.nombre,
    email: EMAIL,
    tempPassword,
  });

  console.log('✅ Correo de bienvenida enviado');
  console.log('   Nombre:', user.nombre);
  console.log('   Email:', EMAIL);
  console.log('   Contraseña temporal:', tempPassword);
}

main()
  .catch((e) => {
    console.error('\n❌ Error enviando correo:', e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
