import fetch from 'node-fetch';

const API_URL = 'http://localhost:4000/api';

async function testAdminAPI() {
  try {
    console.log('🔐 Test de l\'API Admin - Récupération des tickets\n');
    console.log('━'.repeat(60));

    // Étape 1: Connexion en tant qu'admin
    console.log('1️⃣  Connexion en tant qu\'admin...');
    const loginResponse = await fetch(`${API_URL}/auth/login`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        email: 'admin@thetiptop.com',
        password: 'Admin123!',
      }),
    });

    if (!loginResponse.ok) {
      console.error('❌ Échec de la connexion');
      const error = await loginResponse.text();
      console.error('Erreur:', error);
      return;
    }

    const loginData = await loginResponse.json();
    console.log('✅ Connexion réussie');
    console.log(`   Token: ${loginData.data.token.substring(0, 20)}...`);
    console.log(`   Rôle: ${loginData.data.user.role}\n`);

    const token = loginData.data.token;

    // Étape 2: Récupérer tous les tickets
    console.log('2️⃣  Récupération de tous les tickets...');
    const ticketsResponse = await fetch(`${API_URL}/admin/tickets`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
    });

    if (!ticketsResponse.ok) {
      console.error('❌ Échec de la récupération des tickets');
      const error = await ticketsResponse.text();
      console.error('Erreur:', error);
      return;
    }

    const ticketsData = await ticketsResponse.json();
    console.log('✅ Tickets récupérés avec succès\n');

    console.log('━'.repeat(60));
    console.log('📊 RÉSULTAT DE L\'API');
    console.log('━'.repeat(60));
    console.log(`   Total de tickets: ${ticketsData.data.tickets.length}`);
    console.log(`   Page: ${ticketsData.data.pagination.page}`);
    console.log(`   Limite: ${ticketsData.data.pagination.limit}`);
    console.log(`   Total: ${ticketsData.data.pagination.total}`);
    console.log(`   Pages totales: ${ticketsData.data.pagination.totalPages}\n`);

    if (ticketsData.data.tickets.length > 0) {
      console.log('📋 PREMIERS TICKETS:\n');
      ticketsData.data.tickets.slice(0, 5).forEach((ticket, index) => {
        console.log(`${index + 1}. Code: ${ticket.code}`);
        console.log(`   Statut: ${ticket.status}`);
        console.log(`   Client: ${ticket.user_name} (${ticket.user_email})`);
        console.log(`   Prix: ${ticket.prize_name} (${ticket.prize_type})`);
        console.log(`   Joué le: ${new Date(ticket.played_at).toLocaleString('fr-FR')}`);
        console.log('');
      });
    } else {
      console.log('⚠️  Aucun ticket retourné par l\'API\n');
    }

    // Étape 3: Tester avec filtres
    console.log('3️⃣  Test avec filtre PENDING...');
    const pendingResponse = await fetch(`${API_URL}/admin/tickets?status=PENDING`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
    });

    if (pendingResponse.ok) {
      const pendingData = await pendingResponse.json();
      console.log(`✅ ${pendingData.data.tickets.length} tickets PENDING trouvés\n`);
    }

    // Étape 4: Récupérer les statistiques
    console.log('4️⃣  Récupération des statistiques...');
    const statsResponse = await fetch(`${API_URL}/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\n');
      console.log('━'.repeat(60));
      console.log('📊 STATISTIQUES');
      console.log('━'.repeat(60));
      console.log(`   Total tickets: ${statsData.data.tickets.total_tickets}`);
      console.log(`   Pending: ${statsData.data.tickets.pending}`);
      console.log(`   Claimed: ${statsData.data.tickets.claimed}`);
      console.log(`   Rejected: ${statsData.data.tickets.rejected}`);
      console.log('━'.repeat(60));
    }

    console.log('\n✅ Test terminé avec succès!');
    console.log('\n💡 Si l\'interface frontend ne montre pas les tickets:');
    console.log('   1. Vérifiez que le frontend appelle la bonne URL');
    console.log('   2. Vérifiez que le token admin est bien envoyé');
    console.log('   3. Vérifiez la console du navigateur pour les erreurs');
    console.log('   4. Vérifiez les CORS si le frontend est sur un autre domaine');

  } catch (error) {
    console.error('❌ Erreur:', error.message);
  }
}

testAdminAPI();
