/**
 * Script pour tester l'authentification admin et l'accès aux tickets
 */
const API_URL = 'http://localhost:4000';

async function testAdminAuth() {
  try {
    console.log('🔐 Test d\'authentification ADMIN...\n');

    // 1. Login avec le compte admin
    console.log('📝 Connexion avec admin@thetiptop.com...');
    const loginResponse = await fetch(`${API_URL}/api/auth/login`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        email: 'admin@thetiptop.com',
        password: 'Admin123!', // Mot de passe par défaut
      }),
    });

    if (!loginResponse.ok) {
      const errorData = await loginResponse.json();
      console.error('❌ Échec de connexion:', errorData);
      console.log('\n💡 Si le mot de passe est incorrect, essayez avec admin@test.com');
      return;
    }

    const loginData = await loginResponse.json();
    console.log('✅ Connexion réussie!');
    console.log('User:', loginData.user);
    console.log('Role:', loginData.user?.role);

    const token = loginData.token;

    if (!token) {
      console.error('❌ Token manquant dans la réponse');
      return;
    }

    // 2. Vérifier le rôle
    if (loginData.user?.role !== 'ADMIN') {
      console.error(`❌ Rôle incorrect: ${loginData.user?.role}`);
      console.log('Le compte doit avoir le rôle ADMIN pour accéder aux tickets');
      return;
    }

    console.log('\n🎯 Rôle ADMIN confirmé!\n');

    // 3. Tester l'accès aux tickets
    console.log('📊 Récupération des tickets...');
    const ticketsResponse = await fetch(`${API_URL}/api/admin/tickets`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
    });

    if (!ticketsResponse.ok) {
      const errorData = await ticketsResponse.json();
      console.error('❌ Échec de récupération des tickets:', errorData);
      console.log('Status:', ticketsResponse.status);
      console.log('Headers:', Object.fromEntries(ticketsResponse.headers.entries()));
      return;
    }

    const ticketsData = await ticketsResponse.json();
    console.log('✅ Tickets récupérés avec succès!');
    console.log(`Total de tickets: ${ticketsData.data?.pagination?.total || 0}`);
    console.log(`Page: ${ticketsData.data?.pagination?.page || 1}`);
    console.log(`Tickets sur cette page: ${ticketsData.data?.tickets?.length || 0}\n`);

    if (ticketsData.data?.tickets?.length > 0) {
      console.log('🎫 Exemple de tickets:');
      console.table(ticketsData.data.tickets.slice(0, 5).map(t => ({
        code: t.code,
        status: t.status,
        user: t.user_name,
        prize: t.prize_name,
        played_at: new Date(t.played_at).toLocaleDateString('fr-FR'),
      })));
    }

    // 4. Tester les statistiques
    console.log('\n📈 Récupération des statistiques...');
    const statsResponse = await fetch(`${API_URL}/api/admin/statistics`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
    });

    if (statsResponse.ok) {
      const statsData = await statsResponse.json();
      console.log('✅ Statistiques récupérées:');
      console.log('- Utilisateurs totaux:', statsData.data?.users?.total_users);
      console.log('- Tickets totaux:', statsData.data?.tickets?.total_tickets);
      console.log('- Tickets en attente:', statsData.data?.tickets?.pending);
      console.log('- Tickets réclamés:', statsData.data?.tickets?.claimed);
    }

    console.log('\n✅ Tous les tests réussis! L\'API admin fonctionne correctement.');
    console.log('\n🔑 Token pour le frontend:');
    console.log(`Bearer ${token}`);
    console.log('\n💡 Utilisez ce token dans le localStorage du frontend:');
    console.log(`localStorage.setItem('token', '${token}');`);

  } catch (error) {
    console.error('❌ Erreur:', error.message);
    console.log('\n💡 Assurez-vous que le backend est démarré: npm start');
  }
}

testAdminAuth();
