/**
 * Script pour vérifier et créer un compte ADMIN
 */
import { pool } from '../db.js';
import bcrypt from 'bcrypt';

async function checkAndCreateAdmin() {
  try {
    console.log('🔍 Vérification des utilisateurs ADMIN...\n');

    // 1. Vérifier tous les utilisateurs
    const allUsers = await pool.query(`
      SELECT id, email, role, is_verified, created_at
      FROM users
      ORDER BY created_at DESC
    `);

    console.log(`📊 Total d'utilisateurs: ${allUsers.rows.length}\n`);
    console.table(allUsers.rows);

    // 2. Vérifier les admins existants
    const admins = await pool.query(`
      SELECT email, role, is_verified
      FROM users
      WHERE role = 'ADMIN'
    `);

    console.log(`\n👑 Nombre d'administrateurs: ${admins.rows.length}`);

    if (admins.rows.length > 0) {
      console.log('✅ Administrateurs trouvés:');
      console.table(admins.rows);
    } else {
      console.log('❌ Aucun administrateur trouvé!\n');

      // 3. Proposer de créer ou promouvoir un admin
      if (allUsers.rows.length > 0) {
        console.log('📝 Options:');
        console.log('1. Promouvoir un utilisateur existant au rôle ADMIN');
        console.log('2. Créer un nouveau compte ADMIN\n');

        // Promouvoir le premier utilisateur au rôle ADMIN (pour l'exemple)
        const userToPromote = allUsers.rows[0];
        console.log(`🔄 Promotion de ${userToPromote.email} au rôle ADMIN...`);

        await pool.query(
          'UPDATE users SET role = $1, is_verified = TRUE WHERE id = $2',
          ['ADMIN', userToPromote.id]
        );

        console.log(`✅ ${userToPromote.email} est maintenant ADMIN!\n`);
      } else {
        console.log('📝 Création d\'un compte ADMIN par défaut...');

        const hashedPassword = await bcrypt.hash('Admin123!', 10);

        const result = await pool.query(`
          INSERT INTO users (email, password, first_name, last_name, role, is_verified)
          VALUES ($1, $2, $3, $4, $5, TRUE)
          RETURNING id, email, role
        `, ['admin@thetiptop.com', hashedPassword, 'Admin', 'TheTipTop', 'ADMIN']);

        console.log('✅ Compte ADMIN créé:');
        console.log(`   Email: admin@thetiptop.com`);
        console.log(`   Mot de passe: Admin123!`);
        console.log(`   ID: ${result.rows[0].id}\n`);
      }
    }

    // 4. Vérification finale
    const finalCheck = await pool.query(`
      SELECT email, role, is_verified
      FROM users
      WHERE role = 'ADMIN'
    `);

    console.log('🎯 Résultat final - Administrateurs:');
    console.table(finalCheck.rows);

    // 5. Vérifier les tickets
    const ticketsCount = await pool.query('SELECT COUNT(*) as count FROM tickets');
    console.log(`\n🎫 Nombre total de tickets: ${ticketsCount.rows[0].count}`);

    await pool.end();
    console.log('\n✅ Script terminé avec succès!');
  } catch (error) {
    console.error('❌ Erreur:', error.message);
    await pool.end();
    process.exit(1);
  }
}

checkAndCreateAdmin();
