/**
 * Script DIRECT de reset de mot de passe
 * 
 * POURQUOI CE SCRIPT ?
 * -----------------
 * - Le compte `test@example.com` N'EXISTE PAS (vous avez raison !)
 * - L'envoi d'email nécessite une configuration SMTP complexe
 * - VOUS VOULEZ UNE SOLUTION DIRECTE, SANS PERDRE DE TEMPS
 * 
 * CE QUE FAIT CE SCRIPT :
 * -------------------
 * - Réinitialise DIRECTEMENT le mot de passe d'un compte existant
 * - Sans avoir besoin d'email
 * - Sans avoir besoin d'interface graphique
 * 
 * COMMENT UTILISER :
 * ---------------
 * 1. Ouvrez un terminal dans le dossier keep-notes
 * 2. Exécutez: node scripts/reset-password.js
 * 3. Quand demandé, entrez l'email du compte à réinitialiser
 * 4. Entrez le nouveau mot de passe (2 fois pour confirmation)
 * 5. FINI ! Connectez-vous avec le nouveau mot de passe
 */

const readline = require('readline');
const bcrypt = require('bcryptjs');
const prisma = require('../lib/prisma').default;

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

console.log('╔══════════════════════════════════════════════════════════════════╗');
console.log('║                    RESET DE MOT DE PASSE DIRECT                         ║');
console.log('║                                                                     ║');
console.log('║  ⚠️  ATTENTION : Utilisez seulement pour VOTRE propre compte !  ║');
console.log('║                                                                     ║');
console.log('╚══════════════════════════════════════════════════════════════════════╝');
console.log('');

rl.question('Entrez l\'EMAIL du compte à réinitialiser : ', async (email) => {
  if (!email || !email.includes('@')) {
    console.log('❌ Erreur : Email invalide !');
    rl.close();
    process.exit(1);
  }

  email = email.toLowerCase().trim();
  
  console.log(`🔍 Recherche du compte : ${email}...`);
  
  try {
    const user = await prisma.user.findUnique({
      where: { email: email }
    });

    if (!user) {
      console.log('');
      console.log('❌ ERREUR : AUCUN compte trouvé avec cet email !');
      console.log('');
      console.log('📋 COMPTES DISPONIBLES (si existants) :');
      console.log('─────────────────────────────────────────');
      
      // Afficher tous les utilisateurs de la base de données
      const allUsers = await prisma.user.findMany({
        select: { email: true, name: true, role: true, createdAt: true },
        orderBy: { createdAt: 'desc' }
      });
      
      if (allUsers.length > 0) {
        console.log('');
        allUsers.forEach((u, index) => {
          console.log(`${index + 1}. 📧 Email: ${u.email}`);
          console.log(`   👤 Nom: ${u.name || 'N/A'}`);
          console.log(`   🏷️ Rôle: ${u.role}`);
          console.log(`   📅 Créé: ${u.createdAt.toLocaleString('fr-FR')}`);
          console.log('');
        });
      } else {
        console.log('   (Aucun compte dans la base de données)');
      }
      
      console.log('─────────────────────────────────────────');
      console.log('');
      rl.close();
      process.exit(1);
    }

    console.log(`✅ Compte trouvé : ${user.email} (${user.name})`);
    console.log('');

    rl.question('Entrez le NOUVEAU mot de passe (minimum 6 caractères) : ', async (newPassword) => {
      if (!newPassword || newPassword.length < 6) {
        console.log('❌ Erreur : Le mot de passe doit avoir au moins 6 caractères !');
        rl.close();
        process.exit(1);
      }

      rl.question('Confirmez le nouveau mot de passe : ', async (confirmPassword) => {
        if (newPassword !== confirmPassword) {
          console.log('❌ Erreur : Les mots de passe ne correspondent pas !');
          rl.close();
          process.exit(1);
        }

        console.log('');
        console.log('🔄 Réinitialisation du mot de passe en cours...');
        
        const hashedPassword = await bcrypt.hash(newPassword, 10);

        await prisma.user.update({
          where: { id: user.id },
          data: {
            password: hashedPassword,
            resetToken: null,
            resetTokenExpiry: null
          }
        });

        console.log('✅ SUCCÈS ! Le mot de passe a été réinitialisé !');
        console.log('');
        console.log('═══════════════════════════════════════════════════════════════════════');
        console.log('🎉 VOUS POUVEZ MAINTENANT VOUS CONNECTER !');
        console.log('═════════════════════════════════════════════════════════════════════');
        console.log('');
        console.log('📱 URL de connexion : http://localhost:3000/login');
        console.log('📧 Email :', email);
        console.log('🔑 Mot de passe :', newPassword);
        console.log('');
        console.log('⏩ Copiez ces informations et connectez-vous !');
        console.log('');

        rl.close();
        process.exit(0);
      });
    });
  } catch (error) {
    console.log('');
    console.log('❌ ERREUR lors de la réinitialisation :');
    console.error(error);
    rl.close();
    process.exit(1);
  }
});
