const readline = require('readline');
const chalk = require('chalk');

const { loadGiftLegend, normalizeKey } = require('./giftLegend');

/**
 * Ouvre une invite interactive dans le terminal pour simuler des dons sans
 * attendre un vrai live. Tape le nom (ou l'id) d'un don + Entree pour le
 * declencher comme s'il venait de TikTok. Ajoute " xN" pour repeter (ex: "rose x5").
 */
function startGiftSimulatorPrompt(broadcast) {
  const { flat } = loadGiftLegend();

  function printList() {
    console.log(chalk.magenta('\nDons disponibles a simuler :'));
    for (const entry of flat) {
      console.log(
        chalk.magenta(`  ${entry.id.padEnd(20)}`) +
        chalk.gray(`"${entry.name}" - ${entry.diamonds}💎 - pseudo affiche ${entry.durationMs / 1000}s`)
      );
    }
    console.log(chalk.magenta('Tape un nom/id + Entree pour simuler (ex: rose, "tiktok univers x3"). "list" pour revoir, "quit" pour arreter.'));
  }

  printList();

  const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: chalk.magenta('don> ') });
  rl.prompt();

  rl.on('line', (line) => {
    const trimmed = line.trim();
    if (!trimmed) { rl.prompt(); return; }

    const lower = trimmed.toLowerCase();
    if (lower === 'quit' || lower === 'exit') {
      console.log(chalk.magenta('Simulateur de dons arrete (le jeu continue de tourner).'));
      rl.close();
      return;
    }
    if (lower === 'list') {
      printList();
      rl.prompt();
      return;
    }

    const match = trimmed.match(/^(.*?)(?:\s*x\s*(\d+))?$/i);
    const namePart = (match ? match[1] : trimmed).trim();
    const repeatCount = match && match[2] ? Math.max(1, parseInt(match[2], 10)) : 1;

    const key = normalizeKey(namePart);
    const entry = flat.find((g) => normalizeKey(g.id) === key || normalizeKey(g.name) === key);

    if (!entry) {
      console.log(chalk.red(`Don inconnu : "${namePart}". Tape "list" pour voir les noms disponibles.`));
      rl.prompt();
      return;
    }

    broadcast({
      type: 'gift',
      uniqueId: 'simulateur',
      giftName: entry.name,
      diamondCount: entry.diamonds,
      repeatCount
    });
    console.log(chalk.green(`Simule : ${entry.name} x${repeatCount} (${entry.diamonds * repeatCount} diamants)`));
    rl.prompt();
  });

  return rl;
}

module.exports = { startGiftSimulatorPrompt };
