import { NextResponse } from "next/server";
import { createSbServer } from "@/lib/supabaseServer";
import { sendUniversalEmailV2 } from "@/lib/emailTemplateService";

async function assertStaff(sb: ReturnType<typeof createSbServer>, userId: string) {
  const { data: me } = await sb
    .from("staff_users")
    .select("is_staff")
    .eq("user_id", userId)
    .maybeSingle();
  return !!me?.is_staff;
}

export async function POST(req: Request, { params }: { params: { id: string } }) {
  const supabase = createSbServer();
  const { data: { user } } = await supabase.auth.getUser();
  
  if (!user) {
    return NextResponse.json({ error: "Non authentifié." }, { status: 401 });
  }
  
  const isStaff = await assertStaff(supabase, user.id);
  if (!isStaff) {
    return NextResponse.json({ error: "Accès réservé au staff." }, { status: 403 });
  }

  const productionId = params.id;

  try {
    // Récupérer la production avec l'organisation
    const { data: production, error: prodError } = await supabase
      .from("productions")
      .select(`
        *,
        organizations!inner (
          id,
          name,
          structure_api,
          organization_details (
            code_employeur,
            prenom_contact,
            email_notifs,
            email_notifs_cc
          )
        )
      `)
      .eq("id", productionId)
      .single();

    if (prodError || !production) {
      console.error("Erreur récupération production:", prodError);
      return NextResponse.json({ error: "Production non trouvée" }, { status: 404 });
    }

    const org = production.organizations;
    const orgDetails = org.organization_details;

    // Vérifier les emails de notification
    if (!orgDetails?.email_notifs) {
      return NextResponse.json({ 
        error: "L'organisation n'a pas d'email de notification configuré" 
      }, { status: 400 });
    }

    // Préparer les données pour l'email
    const declarationDate = production.declaration_date 
      ? new Date(production.declaration_date).toLocaleDateString("fr-FR", {
          day: "2-digit",
          month: "2-digit",
          year: "numeric"
        })
      : new Date().toLocaleDateString("fr-FR", {
          day: "2-digit",
          month: "2-digit",
          year: "numeric"
        });

    // Envoyer l'email via le système universel V2
    await sendUniversalEmailV2({
      type: "production-declared",
      toEmail: orgDetails.email_notifs,
      ccEmail: orgDetails.email_notifs_cc || undefined,
      data: {
        firstName: orgDetails?.prenom_contact || "cher client",
        organizationName: org.name || "Votre structure",
        employerCode: orgDetails?.code_employeur || "Non renseigné",
        handlerName: "Renaud BREVIERE-ABRAHAM",
        productionName: production.name || "Production sans nom",
        declarationDate: declarationDate,
        productionReference: production.reference || "En cours d'attribution",
      },
    });

    console.log(`✅ Email de notification envoyé pour la production ${productionId}`);

    return NextResponse.json({ 
      success: true, 
      message: "Notification envoyée avec succès" 
    });

  } catch (error) {
    console.error("Erreur lors de l'envoi de la notification:", error);
    return NextResponse.json({ 
      error: error instanceof Error ? error.message : "Erreur inconnue" 
    }, { status: 500 });
  }
}
