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

export const dynamic = "force-dynamic";

export async function GET(_: Request, { params }: { params: { id: string } }) {
  const sb = createSbServer();
  const { data: { user } } = await sb.auth.getUser();
  if (!user) return new NextResponse("Unauthorized", { status: 401 });

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

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

  // Récupérer le ticket
  const { data: ticket } = await sb
    .from("tickets")
    .select("created_by, org_id")
    .eq("id", params.id)
    .single();

  console.log('📋 [recipient-info] Ticket ID:', params.id);
  console.log('📋 [recipient-info] Ticket data:', ticket);

  if (!ticket || !ticket.created_by) {
    console.error('❌ [recipient-info] Ticket ou created_by introuvable');
    return NextResponse.json({ error: "Ticket ou créateur introuvable" }, { status: 404 });
  }

  console.log('📋 [recipient-info] Created by:', ticket.created_by);

  // Utiliser le service role pour accéder aux données auth
  const sbAdmin = createSbServiceRole();

  // Récupérer l'email et les métadonnées de l'utilisateur créateur
  const { data: creatorUser, error: userError } = await sbAdmin.auth.admin.getUserById(ticket.created_by);
  
  console.log('📋 [recipient-info] getUserById result:', { 
    hasData: !!creatorUser, 
    hasUser: !!creatorUser?.user,
    hasEmail: !!creatorUser?.user?.email,
    error: userError 
  });
  
  if (!creatorUser?.user?.email) {
    console.error('❌ [recipient-info] Email introuvable pour user:', ticket.created_by);
    console.error('❌ [recipient-info] creatorUser:', creatorUser);
    console.error('❌ [recipient-info] userError:', userError);
    return NextResponse.json({ error: "Email introuvable" }, { status: 404 });
  }

  // Récupérer le nom depuis les métadonnées utilisateur
  let name = creatorUser.user.email;
  const metadata = creatorUser.user.user_metadata;
  
  console.log('📋 [recipient-info] User metadata:', JSON.stringify(metadata, null, 2));
  
  // Priorité 1: display_name (c'est là que Supabase Auth stocke le prénom)
  if (metadata?.display_name) {
    name = metadata.display_name;
    console.log('✅ [recipient-info] Nom trouvé dans display_name:', name);
  }
  // Priorité 2: first_name + last_name
  else if (metadata?.first_name) {
    name = metadata.last_name 
      ? `${metadata.first_name} ${metadata.last_name}`
      : metadata.first_name;
    console.log('✅ [recipient-info] Nom trouvé dans first_name:', name);
  }
  else {
    console.log('⚠️ [recipient-info] Aucun nom trouvé, utilisation de l\'email');
  }
  // Sinon: email par défaut (déjà défini)

  return NextResponse.json({
    email: creatorUser.user.email,
    name: name
  });
}
