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

async function createGrandPrizeTicket() {
  console.log('🎫 Création d\'un ticket pour le gros lot "An de thé"...\n');

  try {
    // Récupérer l'ID du GRAND_PRIZE
    const prizeResult = await pool.query(
      "SELECT id, name, stock FROM prizes WHERE type = 'GRAND_PRIZE' LIMIT 1"
    );

    if (prizeResult.rows.length === 0) {
      console.error('❌ Le lot GRAND_PRIZE n\'existe pas!');
      return;
    }

    const prize = prizeResult.rows[0];
    console.log('✅ Lot trouvé:', prize.name);
    console.log('   Stock actuel:', prize.stock);

    if (prize.stock <= 0) {
      console.error('❌ Le stock est épuisé! Impossible de créer un ticket.');
      return;
    }

    // Générer un code unique pour le ticket
    const ticketCode = `GRAND-${Date.now()}-${Math.random().toString(36).substring(2, 8).toUpperCase()}`;

    // Créer le ticket
    const ticketResult = await pool.query(
      `INSERT INTO tickets (code, prize_id, status, played_at)
       VALUES ($1, $2, NULL, NULL)
       RETURNING id, code`,
      [ticketCode, prize.id]
    );

    const ticket = ticketResult.rows[0];

    console.log('\n🎉 Ticket créé avec succès!');
    console.log('   Code:', ticket.code);
    console.log('   ID:', ticket.id);
    console.log('   Prize:', prize.name);
    console.log('   Status: Non joué (prêt à être utilisé)');

    // Décrémenter le stock
    await pool.query(
      "UPDATE prizes SET stock = stock - 1 WHERE id = $1",
      [prize.id]
    );

    console.log('\n✅ Stock décrémenté: ', prize.stock, '→', prize.stock - 1);

    // Afficher le résumé
    const summary = await pool.query(
      `SELECT
        p.name,
        p.stock,
        COUNT(t.id) as tickets_crees,
        COUNT(CASE WHEN t.played_at IS NOT NULL THEN 1 END) as tickets_joues
       FROM prizes p
       LEFT JOIN tickets t ON p.id = t.prize_id
       WHERE p.type = 'GRAND_PRIZE'
       GROUP BY p.id, p.name, p.stock`
    );

    console.log('\n📊 Résumé "An de thé":');
    console.table(summary.rows);

  } catch (error) {
    console.error('❌ Erreur:', error.message);
  } finally {
    await pool.end();
  }
}

createGrandPrizeTicket();
