#!/usr/bin/env tsx
/**
 * Script pour générer les icônes PNG et ICO à partir de iconTC4S.png
 * Préserve la transparence du PNG source
 *
 * Usage: pnpm tsx scripts/generate-icons-from-jpg.ts
 *
 * Prérequis: npm install -D sharp
 */

import { existsSync } from 'fs';
import { join } from 'path';

const sizes = [16, 32, 180, 192, 512];
const publicDir = join(process.cwd(), 'public');
const sourceImage = join(process.cwd(), 'public', 'icons', 'iconTC4S.png');

async function generateIcons() {
  // Vérifier si sharp est disponible
  let sharp: any;
  try {
    sharp = require('sharp');
  } catch (e) {
    console.log("⚠️  sharp n'est pas installé. Installation...");
    console.log('   Exécutez: pnpm add -D sharp');
    console.log('   Puis relancez ce script.');
    return;
  }

  if (!existsSync(sourceImage)) {
    console.error(`❌ ${sourceImage} introuvable`);
    return;
  }

  console.log(
    '🎨 Génération des icônes à partir de iconTC4S.png (avec transparence)...\n'
  );

  // Obtenir les métadonnées de l'image pour détecter la couleur dominante du fond
  const metadata = await sharp(sourceImage).metadata();
  console.log(`📐 Dimensions source: ${metadata.width}x${metadata.height}\n`);

  // Générer les différentes tailles avec cover pour remplir sans bordures
  // La transparence est préservée automatiquement avec PNG
  for (const size of sizes) {
    try {
      const outputPath = join(publicDir, `icon-${size}x${size}.png`);
      await sharp(sourceImage)
        .resize(size, size, {
          fit: 'cover',
          position: 'center',
        })
        .png({
          compressionLevel: 9,
          adaptiveFiltering: true,
          palette: false, // Préserve la transparence et les couleurs
        })
        .toFile(outputPath);
      console.log(`✅ Généré: icon-${size}x${size}.png`);
    } catch (error) {
      console.error(
        `❌ Erreur lors de la génération de icon-${size}x${size}.png:`,
        error
      );
    }
  }

  // Générer apple-touch-icon
  try {
    const outputPath = join(publicDir, 'apple-touch-icon.png');
    await sharp(sourceImage)
      .resize(180, 180, {
        fit: 'cover',
        position: 'center',
      })
      .png({
        compressionLevel: 9,
        adaptiveFiltering: true,
        palette: false,
      })
      .toFile(outputPath);
    console.log(`✅ Généré: apple-touch-icon.png`);
  } catch (error) {
    console.error(
      `❌ Erreur lors de la génération de apple-touch-icon.png:`,
      error
    );
  }

  // Générer favicon.ico (32x32)
  // Note: ICO peut supporter la transparence, mais on génère un PNG pour compatibilité
  try {
    const faviconPath = join(publicDir, 'favicon.ico');
    await sharp(sourceImage)
      .resize(32, 32, {
        fit: 'cover',
        position: 'center',
      })
      .png({
        compressionLevel: 9,
        adaptiveFiltering: true,
        palette: false,
      })
      .toFile(faviconPath);
    console.log(`✅ Généré: favicon.ico (32x32 avec transparence)`);
  } catch (error) {
    console.error(`❌ Erreur lors de la génération de favicon.ico:`, error);
  }

  // Générer icon.png (192x192 pour PWA)
  try {
    const iconPath = join(publicDir, 'icon.png');
    await sharp(sourceImage)
      .resize(192, 192, {
        fit: 'cover',
        position: 'center',
      })
      .png({
        compressionLevel: 9,
        adaptiveFiltering: true,
        palette: false,
      })
      .toFile(iconPath);
    console.log(`✅ Généré: icon.png (192x192)`);
  } catch (error) {
    console.error(`❌ Erreur lors de la génération de icon.png:`, error);
  }

  console.log('\n✨ Génération terminée!');
}

generateIcons().catch(console.error);
