#!/usr/bin/env node

/**
 * Script pour migrer les féminisations du fichier JSON vers Supabase
 */

import { createClient } from '@supabase/supabase-js';
import { config } from 'dotenv';
import { promises as fs } from 'fs';
import path from 'path';

// Charger les variables d'environnement
config({ path: '.env.local' });

const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY;

if (!supabaseUrl || !supabaseServiceKey) {
  console.error('❌ Variables d\'environnement manquantes:');
  console.error('   NEXT_PUBLIC_SUPABASE_URL:', !!supabaseUrl ? '✅' : '❌');
  console.error('   SUPABASE_SERVICE_ROLE_KEY:', !!supabaseServiceKey ? '✅' : '❌');
  process.exit(1);
}

const supabase = createClient(supabaseUrl, supabaseServiceKey);

async function migrateFeminisations() {
  try {
    console.log('📂 Lecture du fichier JSON des féminisations...');
    
    const filePath = path.join(process.cwd(), 'public/data/professions-feminisations.json');
    const fileContent = await fs.readFile(filePath, 'utf8');
    const feminisations = JSON.parse(fileContent);
    
    console.log(`✅ ${feminisations.length} féminisations trouvées dans le fichier`);
    
    // Vérifier si la table existe et est vide
    const { data: existing, error: checkError } = await supabase
      .from('professions_feminisations')
      .select('profession_code')
      .limit(1);
    
    if (checkError) {
      console.error('❌ Erreur lors de la vérification de la table:', checkError.message);
      return;
    }
    
    if (existing && existing.length > 0) {
      console.log('⚠️  La table contient déjà des données. Voulez-vous continuer ? (y/N)');
      // En mode script, on continue automatiquement
      console.log('📝 Insertion des données...');
    }
    
    // Insérer les données par batch pour éviter les timeouts
    const batchSize = 100;
    let inserted = 0;
    
    for (let i = 0; i < feminisations.length; i += batchSize) {
      const batch = feminisations.slice(i, i + batchSize);
      
      const { data, error } = await supabase
        .from('professions_feminisations')
        .upsert(batch, { 
          onConflict: 'profession_code',
          ignoreDuplicates: false 
        })
        .select('profession_code');
      
      if (error) {
        console.error(`❌ Erreur lors de l'insertion du batch ${i + 1}:`, error.message);
        continue;
      }
      
      inserted += data?.length || 0;
      console.log(`✅ Batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(feminisations.length / batchSize)} terminé`);
    }
    
    console.log(`🎉 Migration terminée ! ${inserted} féminisations insérées/mises à jour.`);
    
    // Vérification finale
    const { data: finalCount, error: countError } = await supabase
      .from('professions_feminisations')
      .select('profession_code', { count: 'exact', head: true });
    
    if (!countError) {
      console.log(`📊 Total dans la table: ${finalCount?.length || 'inconnu'} féminisations`);
    }
    
  } catch (error) {
    console.error('❌ Erreur durant la migration:', error);
  }
}

// Exécuter la migration
migrateFeminisations();