import { pool } from '../db.js';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import { config } from 'dotenv';

config();

const testLogin = async () => {
  try {
    const email = 'employee1@thetiptop.com';
    const password = 'Employee123!';

    console.log('\n🧪 TEST DE CONNEXION EMPLOYÉ\n');

    // 1. Récupérer l'utilisateur
    const userResult = await pool.query(
      'SELECT id, email, password, role, first_name, last_name FROM users WHERE email = $1',
      [email]
    );

    if (userResult.rows.length === 0) {
      console.log('❌ Utilisateur non trouvé');
      process.exit(1);
    }

    const user = userResult.rows[0];
    console.log('✅ Utilisateur trouvé:');
    console.log('   ID:', user.id);
    console.log('   Email:', user.email);
    console.log('   Rôle:', user.role);
    console.log('');

    // 2. Vérifier le mot de passe
    const isPasswordValid = await bcrypt.compare(password, user.password);

    if (!isPasswordValid) {
      console.log('❌ Mot de passe incorrect');
      process.exit(1);
    }

    console.log('✅ Mot de passe valide\n');

    // 3. Générer un token JWT
    const jwtSecret = process.env.JWT_SECRET || 'your-secret-key';
    const token = jwt.sign(
      {
        id: user.id,
        email: user.email,
        role: user.role,
      },
      jwtSecret,
      { expiresIn: '24h' }
    );

    console.log('✅ Token JWT généré:\n');
    console.log(token.substring(0, 50) + '...\n');

    // 4. Tester l'accès aux tickets PENDING
    const ticketsResult = await pool.query(`
      SELECT COUNT(*) as count
      FROM tickets
      WHERE status = 'PENDING'
    `);

    console.log('📊 Tickets PENDING:', ticketsResult.rows[0].count);
    console.log('');

    console.log('🎯 RÉSULTAT DU TEST:');
    console.log('   ✅ Authentification: OK');
    console.log('   ✅ Génération token: OK');
    console.log('   ✅ Accès base de données: OK');
    console.log('');
    console.log('💡 Le backend fonctionne correctement.');
    console.log('   Si l\'erreur persiste, le problème vient du frontend:');
    console.log('   - Token non envoyé dans les headers');
    console.log('   - Token non stocké après connexion');
    console.log('   - Vérifiez localStorage dans le navigateur\n');

    await pool.end();
    process.exit(0);
  } catch (error) {
    console.error('❌ Erreur:', error.message);
    await pool.end();
    process.exit(1);
  }
};

testLogin();
