#!/usr/bin/env node

/**
 * Script pour vérifier et créer la table professions_feminisations
 */

import { createClient } from '@supabase/supabase-js';
import { config } from 'dotenv';

// 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');
  process.exit(1);
}

const supabase = createClient(supabaseUrl, supabaseServiceKey);

async function checkAndCreateTable() {
  try {
    console.log('🔍 Vérification de la table professions_feminisations...');
    
    // Tester si la table existe en faisant une requête simple
    const { data, error } = await supabase
      .from('professions_feminisations')
      .select('profession_code')
      .limit(1);
    
    if (error) {
      if (error.message.includes('does not exist')) {
        console.log('❌ La table n\'existe pas. Création en cours...');
        
        // Créer la table avec SQL direct
        const createTableSQL = `
          -- Créer la table professions_feminisations
          create table if not exists public.professions_feminisations (
            id uuid primary key default gen_random_uuid(),
            profession_code varchar not null unique,
            profession_label varchar not null,
            profession_feminine varchar not null,
            created_at timestamptz not null default now(),
            updated_at timestamptz not null default now()
          );

          -- Créer un index sur le code profession
          create index if not exists idx_professions_feminisations_code 
          on public.professions_feminisations(profession_code);

          -- Activer RLS
          alter table public.professions_feminisations enable row level security;

          -- Policy de lecture
          drop policy if exists professions_feminisations_read on public.professions_feminisations;
          create policy professions_feminisations_read on public.professions_feminisations
            for select using (auth.uid() is not null);

          -- Policy d'écriture pour le staff
          drop policy if exists professions_feminisations_staff_write on public.professions_feminisations;
          create policy professions_feminisations_staff_write on public.professions_feminisations
            for all using (
              exists (
                select 1 from public.staff_users s
                where s.user_id = auth.uid() and coalesce(s.is_staff, false) = true
              )
            );

          -- Fonction pour updated_at
          create or replace function public.handle_updated_at()
          returns trigger as $$
          begin
            new.updated_at = now();
            return new;
          end;
          $$ language plpgsql;

          -- Trigger pour updated_at
          drop trigger if exists trigger_professions_feminisations_updated_at on public.professions_feminisations;
          create trigger trigger_professions_feminisations_updated_at
            before update on public.professions_feminisations
            for each row execute function public.handle_updated_at();
        `;
        
        const { error: createError } = await supabase.rpc('exec_sql', { 
          sql: createTableSQL 
        });
        
        if (createError) {
          console.error('❌ Erreur lors de la création de la table:', createError);
          
          // Si rpc n'existe pas, essayons une approche différente
          console.log('🔧 Tentative de création manuelle...');
          console.log('⚠️  Veuillez exécuter manuellement cette migration dans l\'éditeur SQL de Supabase:');
          console.log(createTableSQL);
          return;
        }
        
        console.log('✅ Table créée avec succès !');
      } else {
        console.error('❌ Erreur lors de la vérification:', error);
        return;
      }
    } else {
      console.log('✅ La table existe déjà');
      console.log(`📊 Nombre d'enregistrements: ${data?.length || 0}`);
    }
    
    // Vérifier à nouveau après création
    const { data: finalData, error: finalError } = await supabase
      .from('professions_feminisations')
      .select('profession_code', { count: 'exact' })
      .limit(1);
    
    if (finalError) {
      console.error('❌ La table n\'est toujours pas accessible:', finalError);
    } else {
      console.log('✅ Table accessible et fonctionnelle');
    }
    
  } catch (error) {
    console.error('❌ Erreur:', error);
  }
}

checkAndCreateTable();