import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
import { cookies } from "next/headers";
import { NextResponse } from "next/server";

export const dynamic = "force-dynamic";

export async function GET() {
  try {
    const supabase = createRouteHandlerClient({ cookies });

    const { data: { session } } = await supabase.auth.getSession();
    if (!session) {
      return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
    }

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

    if (!staffUser || !staffUser.is_staff) {
      return NextResponse.json({ error: "Accès refusé" }, { status: 403 });
    }

    // Récupérer la liste des apporteurs
    const { data: referrers, error } = await supabase
      .from("referrers")
      .select("id, code, name, contact_name, address, postal_code, city, email, created_at")
      .order("name");

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

    return NextResponse.json(referrers || []);
  } catch (error: any) {
    console.error("Erreur GET /api/staff/referrers:", error);
    return NextResponse.json(
      { error: error.message || "Erreur serveur" },
      { status: 500 }
    );
  }
}

export async function POST(request: Request) {
  try {
    const cookieStore = cookies();
    const supabase = createRouteHandlerClient({ cookies: () => cookieStore });

    const { data: { session } } = await supabase.auth.getSession();
    if (!session) {
      return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
    }

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

    if (!staffUser || !staffUser.is_staff) {
      return NextResponse.json({ error: "Accès refusé" }, { status: 403 });
    }

    const body = await request.json();
    const { code, name, contact_name, address, postal_code, city, email } = body;

    if (!code || !name) {
      return NextResponse.json({ error: "Code et nom requis" }, { status: 400 });
    }

    // Créer l'apporteur
    const { data: referrer, error } = await supabase
      .from("referrers")
      .insert({
        code: code.toUpperCase(),
        name,
        contact_name,
        address,
        postal_code,
        city,
        email
      })
      .select()
      .single();

    if (error) {
      console.error("Erreur création apporteur:", error);
      return NextResponse.json({ error: error.message }, { status: 500 });
    }

    return NextResponse.json(referrer);
  } catch (error: any) {
    console.error("Erreur POST /api/staff/referrers:", error);
    return NextResponse.json(
      { error: error.message || "Erreur serveur" },
      { status: 500 }
    );
  }
}

export async function PATCH(request: Request) {
  try {
    const cookieStore = cookies();
    const supabase = createRouteHandlerClient({ cookies: () => cookieStore });

    const { data: { session } } = await supabase.auth.getSession();
    if (!session) {
      return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
    }

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

    if (!staffUser || !staffUser.is_staff) {
      return NextResponse.json({ error: "Accès refusé" }, { status: 403 });
    }

    const body = await request.json();
    const { id, name, contact_name, address, postal_code, city, email } = body;

    if (!id || !name) {
      return NextResponse.json({ error: "ID et nom requis" }, { status: 400 });
    }

    // Mettre à jour l'apporteur (le code ne peut pas être modifié)
    const { data: referrer, error } = await supabase
      .from("referrers")
      .update({
        name,
        contact_name,
        address,
        postal_code,
        city,
        email
      })
      .eq("id", id)
      .select()
      .single();

    if (error) {
      console.error("Erreur mise à jour apporteur:", error);
      return NextResponse.json({ error: error.message }, { status: 500 });
    }

    return NextResponse.json(referrer);
  } catch (error: any) {
    console.error("Erreur PATCH /api/staff/referrers:", error);
    return NextResponse.json(
      { error: error.message || "Erreur serveur" },
      { status: 500 }
    );
  }
}
