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

/**
 * API pour activer manuellement un utilisateur qui est en "Waiting for activation"
 * Utilisation : POST /api/staff/users/activate
 * Body: { email: "user@example.com" }
 */
export async function POST(req: Request) {
  try {
    // 1) Vérifier que l'appelant est Staff
    const sb = createRouteHandlerClient({ cookies });
    const { data: { user } } = await sb.auth.getUser();
    if (!user) return new NextResponse("Unauthorized", { status: 401 });

    const { data: staff } = await sb
      .from("staff_users")
      .select("is_staff")
      .eq("user_id", user.id)
      .maybeSingle();

    if (!staff?.is_staff) return new NextResponse("Forbidden", { status: 403 });

    // 2) Lire l'email de l'utilisateur à activer
    const body = await req.json();
    const email = String(body.email || "").trim().toLowerCase();

    if (!email) {
      return NextResponse.json({ error: "Email requis" }, { status: 400 });
    }

    // 3) Client admin Supabase (service role)
    const admin = createClient(
      process.env.NEXT_PUBLIC_SUPABASE_URL!,
      process.env.SUPABASE_SERVICE_ROLE_KEY!,
      { auth: { autoRefreshToken: false, persistSession: false } }
    );

    // 4) Récupérer l'utilisateur par email
    const { data: users, error: listError } = await admin.auth.admin.listUsers();
    
    if (listError) {
      return NextResponse.json({ error: listError.message }, { status: 500 });
    }

    const targetUser = users.users.find(u => u.email?.toLowerCase() === email);
    
    if (!targetUser) {
      return NextResponse.json({ error: "Utilisateur non trouvé" }, { status: 404 });
    }

    // 5) Mettre à jour l'utilisateur pour le confirmer
    const { data: updated, error: updateErr } = await admin.auth.admin.updateUserById(
      targetUser.id,
      {
        email_confirm: true,
        phone_confirm: true,
        app_metadata: { ...targetUser.app_metadata },
        user_metadata: { ...targetUser.user_metadata },
      }
    );

    if (updateErr) {
      return NextResponse.json({ error: updateErr.message }, { status: 400 });
    }

    return NextResponse.json({
      ok: true,
      message: `Utilisateur ${email} activé avec succès`,
      user_id: targetUser.id,
    });

  } catch (e: any) {
    console.error("Erreur activation utilisateur:", e);
    return new NextResponse(e?.message || "Internal Server Error", { status: 500 });
  }
}
