#!/usr/bin/env node

/**
 * Script pour redimensionner les sprites user1 à 93x224px (même taille que user2)
 * Utilise le package sharp pour le traitement d'images
 */

const fs = require('fs');
const path = require('path');

// Vérifier si sharp est disponible
let sharp;
try {
    sharp = require('sharp');
} catch (err) {
    console.log('❌ Le package "sharp" n\'est pas installé.');
    console.log('📦 Installation en cours...');
    const { execSync } = require('child_process');
    try {
        execSync('npm install --no-save sharp', { stdio: 'inherit' });
        sharp = require('sharp');
        console.log('✅ Sharp installé avec succès!\n');
    } catch (installErr) {
        console.error('❌ Impossible d\'installer sharp. Veuillez l\'installer manuellement:');
        console.error('   npm install sharp');
        process.exit(1);
    }
}

const USER1_DIR = path.join(__dirname, 'public/assets/sprites/user1');
const BACKUP_DIR = path.join(__dirname, 'public/assets/sprites/user1_backup');
const TARGET_WIDTH = 93;
const TARGET_HEIGHT = 224;

async function resizeImages() {
    try {
        // Créer un backup
        if (!fs.existsSync(BACKUP_DIR)) {
            fs.mkdirSync(BACKUP_DIR, { recursive: true });
            console.log('📁 Dossier de backup créé:', BACKUP_DIR);
        }

        // Lire tous les fichiers PNG sauf le spritesheet
        const files = fs.readdirSync(USER1_DIR)
            .filter(f => f.endsWith('.png') && f !== 'player_spritesheet.png');

        console.log(`\n🖼️  Redimensionnement de ${files.length} sprites vers ${TARGET_WIDTH}x${TARGET_HEIGHT}px...\n`);

        for (const file of files) {
            const inputPath = path.join(USER1_DIR, file);
            const backupPath = path.join(BACKUP_DIR, file);

            // Backup de l'original
            if (!fs.existsSync(backupPath)) {
                fs.copyFileSync(inputPath, backupPath);
            }

            // Lire les métadonnées de l'image
            const metadata = await sharp(inputPath).metadata();

            console.log(`📏 ${file}`);
            console.log(`   ${metadata.width}x${metadata.height} → ${TARGET_WIDTH}x${TARGET_HEIGHT}`);

            // Redimensionner avec fit: 'contain' pour préserver le ratio et ajouter fond transparent
            await sharp(inputPath)
                .resize(TARGET_WIDTH, TARGET_HEIGHT, {
                    kernel: 'lanczos3',
                    fit: 'contain',
                    background: { r: 0, g: 0, b: 0, alpha: 0 }
                })
                .toFile(inputPath + '.tmp');

            // Remplacer l'original
            fs.renameSync(inputPath + '.tmp', inputPath);
            console.log(`   ✅ Redimensionné\n`);
        }

        console.log('✨ Toutes les images ont été redimensionnées avec succès!');
        console.log(`💾 Les originaux sont sauvegardés dans: ${BACKUP_DIR}`);

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

// Exécuter
resizeImages();
