// app/api/organizations/route.ts
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
import { cookies, headers } from "next/headers";
import { detectDemoModeFromHeaders } from "@/lib/demo-detector";
import { DEMO_ORGANIZATION } from "@/lib/demo-data";

export async function GET() {
  // 🎭 Vérification du mode démo en premier
  const h = headers();
  const isDemoMode = detectDemoModeFromHeaders(h);
  
  if (isDemoMode) {
    console.log("🎭 [API ORGANIZATIONS] Mode démo détecté - renvoi de données fictives");
    
    return Response.json({ 
      items: [DEMO_ORGANIZATION] 
    });
  }

  try {
    const supabase = createRouteHandlerClient({ cookies });

    const {
      data: { user },
      error: userErr,
    } = await supabase.auth.getUser();
    if (userErr) {
      console.error("supabase.getUser error:", userErr.message);
    }
    if (!user) {
      console.warn('⚠️ [SÉCURITÉ] Tentative d\'accès non authentifié à /api/organizations');
      return new Response("Unauthorized", { status: 401 });
    }

    // 🔒 SÉCURITÉ : Vérifier que l'utilisateur est staff
    const { data: staffUser } = await supabase
      .from("staff_users")
      .select("is_staff")
      .eq("user_id", user.id)
      .maybeSingle();

    if (!staffUser?.is_staff) {
      console.error('❌ [SÉCURITÉ CRITIQUE] Client a tenté d\'accéder à /api/organizations');
      console.error('   - User ID:', user.id);
      console.error('   - User email:', user.email);
      
      return new Response("Forbidden - Staff access only", { status: 403 });
    }

    console.log('✅ [SÉCURITÉ] Staff accède à la liste des organisations:', user.id);

    // RLS appliquée automatiquement (policies can_access_org)
    const { data, error } = await supabase
      .from("organizations")
      .select("id,name,structure_api")
      .order("name", { ascending: true });

    if (error) {
      console.error("organizations select error:", error.message);
      return new Response(error.message, { status: 400 });
    }

    return Response.json({ items: data ?? [] });
  } catch (e: any) {
    console.error("/api/organizations fatal:", e?.message || e);
    return new Response("Internal Server Error", { status: 500 });
  }
}
