import { NextRequest, NextResponse } from "next/server";
import { createSbServer } from "@/lib/supabaseServer";

export const dynamic = 'force-dynamic';
export const revalidate = 0;

async function checkStaffAccess(supabase: any, userId: string) {
  const { data: staff } = await supabase
    .from("staff_users")
    .select("is_staff")
    .eq("user_id", userId)
    .maybeSingle();
  
  return staff?.is_staff || false;
}

export async function GET(req: NextRequest) {
  try {
    const supabase = createSbServer();
    
    // Vérification de l'authentification
    const { data: { user }, error: authError } = await supabase.auth.getUser();
    if (authError || !user) {
      return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
    }

    // Vérification des droits staff
    const isStaff = await checkStaffAccess(supabase, user.id);
    if (!isStaff) {
      return NextResponse.json({ error: "Accès refusé - Staff uniquement" }, { status: 403 });
    }

    // Récupération du paramètre de recherche
    const { searchParams } = new URL(req.url);
    const q = searchParams.get("q") || "";

    // Récupération des organisations avec leurs détails
    let query = supabase
      .from("organizations")
      .select(`
        id,
        name,
        organization_details (
          code_employeur,
          siret,
          entree_en_relation,
          agrement_aem
        )
      `)
      .order("name", { ascending: true });

    // Recherche si paramètre q présent
    if (q.trim()) {
      query = query.or(`name.ilike.%${q}%,organization_details.code_employeur.ilike.%${q}%,organization_details.siret.ilike.%${q}%`);
    }

    const { data: orgs, error } = await query;

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

    // Transformer les données pour simplifier l'accès
    const clients = orgs?.map(org => {
      const details = Array.isArray(org.organization_details) 
        ? org.organization_details[0] 
        : org.organization_details;
      
      return {
        id: org.id,
        name: org.name,
        code_employeur: details?.code_employeur || null,
        siret: details?.siret || null,
        entree_en_relation: details?.entree_en_relation || null,
        agrement_aem: details?.agrement_aem || null,
      };
    }) || [];

    return NextResponse.json(clients);

  } catch (error) {
    console.error("Erreur API clients:", error);
    return NextResponse.json({ error: "Erreur interne" }, { status: 500 });
  }
}
