// app/api/professions-feminisations/route.ts
import { NextRequest, NextResponse } from "next/server";
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
import { createClient } from "@supabase/supabase-js";
import { cookies } from "next/headers";

type ProfessionFeminisation = {
  id?: string;
  profession_code: string;
  profession_label: string;
  profession_feminine: string;
  created_at?: string;
  updated_at?: string;
};

// Client Supabase avec service role pour contourner RLS si nécessaire
function getServiceRoleClient() {
  const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!;
  const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY!;
  
  return createClient(supabaseUrl, supabaseServiceKey, {
    auth: {
      autoRefreshToken: false,
      persistSession: false
    }
  });
}

// GET - Récupérer toutes les féminisations ou une spécifique
export async function GET(request: NextRequest) {
  try {
    const url = new URL(request.url);
    const professionCode = url.searchParams.get('code');

    // Utiliser le service role client pour la lecture car les féminisations doivent être accessibles à tous
    const supabase = getServiceRoleClient();

    if (professionCode) {
      const { data: feminisation, error } = await supabase
        .from('professions_feminisations')
        .select('*')
        .eq('profession_code', professionCode)
        .maybeSingle();

      if (error) {
        console.error("Erreur lors de la récupération de la féminisation:", error);
        return NextResponse.json({ error: "Erreur lors de la récupération de la féminisation" }, { status: 500 });
      }

      // Retourner null explicitement si pas de féminisation trouvée
      return NextResponse.json(feminisation || null);
    }

    const { data: feminisations, error } = await supabase
      .from('professions_feminisations')
      .select('*')
      .order('profession_label');

    if (error) {
      console.error("Erreur lors de la récupération des féminisations:", error);
      return NextResponse.json({ error: "Erreur lors de la récupération des féminisations" }, { status: 500 });
    }

    return NextResponse.json(feminisations);
  } catch (error) {
    console.error("Erreur GET féminisations:", error);
    return NextResponse.json({ error: "Erreur lors de la récupération des féminisations" }, { status: 500 });
  }
}

// POST - Ajouter ou mettre à jour une féminisation
export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const { profession_code, profession_label, profession_feminine } = body;

    if (!profession_code || !profession_label || !profession_feminine) {
      return NextResponse.json(
        { error: "Les champs profession_code, profession_label et profession_feminine sont requis" },
        { status: 400 }
      );
    }

    // Utiliser le client avec service role pour écrire
    const supabase = getServiceRoleClient();

    const { data: feminisation, error } = await supabase
      .from('professions_feminisations')
      .upsert({
        profession_code,
        profession_label,
        profession_feminine: profession_feminine.trim()
      }, {
        onConflict: 'profession_code'
      })
      .select('*')
      .single();

    if (error) {
      console.error("Erreur lors de la sauvegarde de la féminisation:", error);
      return NextResponse.json({ error: "Erreur lors de la sauvegarde de la féminisation" }, { status: 500 });
    }

    return NextResponse.json(feminisation);
  } catch (error) {
    console.error("Erreur POST féminisation:", error);
    return NextResponse.json({ error: "Erreur lors de la sauvegarde de la féminisation" }, { status: 500 });
  }
}

// DELETE - Supprimer une féminisation
export async function DELETE(request: NextRequest) {
  try {
    const url = new URL(request.url);
    const professionCode = url.searchParams.get('code');

    if (!professionCode) {
      return NextResponse.json({ error: "Le code de profession est requis" }, { status: 400 });
    }

    // Utiliser le client avec service role pour supprimer
    const supabase = getServiceRoleClient();

    const { error } = await supabase
      .from('professions_feminisations')
      .delete()
      .eq('profession_code', professionCode);

    if (error) {
      console.error("Erreur lors de la suppression de la féminisation:", error);
      return NextResponse.json({ error: "Erreur lors de la suppression de la féminisation" }, { status: 500 });
    }

    return NextResponse.json({ success: true });
  } catch (error) {
    console.error("Erreur DELETE féminisation:", error);
    return NextResponse.json({ error: "Erreur lors de la suppression de la féminisation" }, { status: 500 });
  }
}