#!/usr/bin/env node

/**
 * Script pour télécharger les images Google Maps en haute résolution
 * 
 * Usage:
 *   node scripts/download-high-res-images.js
 * 
 * Ce script télécharge les images depuis les URLs Google Maps en modifiant
 * les paramètres de taille pour obtenir une meilleure résolution.
 */

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

const IMAGES_DIR = path.join(__dirname, '..', 'public', 'images');

// Configuration des images à télécharger
// Format: { name, url, outputFile }
// Les URLs doivent être les URLs directes des images Google Maps (googleusercontent.com)
// Pour obtenir ces URLs:
// 1. Ouvrez le lien Google Maps dans un navigateur
// 2. Faites un clic droit sur l'image > Inspecter l'élément
// 3. Copiez l'URL de l'image (généralement sur googleusercontent.com)
// 4. Modifiez les paramètres w=XXX par w=1600 et h=YYY par h=1200 dans l'URL
const IMAGES_TO_DOWNLOAD = [
  // Exemple (à remplacer par les vraies URLs):
  // {
  //   name: "Snack du Requin Dormeur",
  //   url: "https://lh3.googleusercontent.com/...w=1600-h=1200-k-no",
  //   outputFile: "restaurant-requin-dormeur.jpg"
  // },
];

/**
 * Télécharge une image depuis une URL
 */
function downloadImage(url, outputPath) {
  return new Promise((resolve, reject) => {
    const protocol = url.startsWith('https') ? https : http;
    
    const file = fs.createWriteStream(outputPath);
    
    protocol.get(url, (response) => {
      if (response.statusCode === 200) {
        response.pipe(file);
        file.on('finish', () => {
          file.close();
          resolve();
        });
      } else if (response.statusCode === 301 || response.statusCode === 302) {
        // Suivre les redirections
        file.close();
        fs.unlinkSync(outputPath);
        downloadImage(response.headers.location, outputPath)
          .then(resolve)
          .catch(reject);
      } else {
        file.close();
        fs.unlinkSync(outputPath);
        reject(new Error(`Erreur HTTP ${response.statusCode}`));
      }
    }).on('error', (err) => {
      file.close();
      if (fs.existsSync(outputPath)) {
        fs.unlinkSync(outputPath);
      }
      reject(err);
    });
  });
}

/**
 * Vérifie si un fichier est une image valide
 */
function isValidImage(filePath) {
  try {
    const stats = fs.statSync(filePath);
    if (stats.size === 0) return false;
    
    // Vérifier l'extension
    const ext = path.extname(filePath).toLowerCase();
    return ['.jpg', '.jpeg', '.png', '.webp'].includes(ext);
  } catch (err) {
    return false;
  }
}

/**
 * Fonction principale
 */
async function main() {
  console.log('========================================');
  console.log('📥 Téléchargement images haute résolution');
  console.log('========================================\n');

  // Créer le dossier images s'il n'existe pas
  if (!fs.existsSync(IMAGES_DIR)) {
    fs.mkdirSync(IMAGES_DIR, { recursive: true });
  }

  if (IMAGES_TO_DOWNLOAD.length === 0) {
    console.log('⚠️  Aucune URL d\'image configurée dans le script.\n');
    console.log('Pour télécharger des images en haute résolution:');
    console.log('1. Ouvrez le lien Google Maps dans un navigateur');
    console.log('2. Faites un clic droit sur l\'image > Inspecter l\'élément');
    console.log('3. Copiez l\'URL de l\'image (généralement sur googleusercontent.com)');
    console.log('4. Modifiez les paramètres w=XXX par w=1600 et h=YYY par h=1200');
    console.log('5. Ajoutez l\'URL dans le tableau IMAGES_TO_DOWNLOAD du script\n');
    console.log('Exemple d\'URL Google Maps image:');
    console.log('https://lh3.googleusercontent.com/gps-cs-s/...w=1600-h=1200-k-no\n');
    return;
  }

  let successCount = 0;
  let failCount = 0;

  for (const image of IMAGES_TO_DOWNLOAD) {
    const outputPath = path.join(IMAGES_DIR, image.outputFile);
    
    console.log(`📸 Téléchargement: ${image.name}`);
    console.log(`   URL: ${image.url.substring(0, 80)}...`);
    
    try {
      await downloadImage(image.url, outputPath);
      
      if (isValidImage(outputPath)) {
        const stats = fs.statSync(outputPath);
        const sizeMB = (stats.size / (1024 * 1024)).toFixed(2);
        console.log(`   ✅ Téléchargé: ${image.outputFile} (${sizeMB} MB)\n`);
        successCount++;
      } else {
        console.log(`   ❌ Fichier invalide: ${image.outputFile}\n`);
        failCount++;
      }
    } catch (error) {
      console.log(`   ❌ Erreur: ${error.message}\n`);
      failCount++;
    }
  }

  console.log('========================================');
  console.log('✅ Téléchargement terminé');
  console.log('========================================');
  console.log(`✅ Succès: ${successCount}`);
  console.log(`❌ Échecs: ${failCount}\n`);
}

// Exécuter le script
main().catch(console.error);

