// app/api/staff/payslips/check-existing/route.ts
import { createSbServer } from "@/lib/supabaseServer";
import { NextRequest, NextResponse } from "next/server";

export async function GET(request: NextRequest) {
  try {
    const sb = createSbServer();
    
    // Vérifier l'authentification
    const { data: { user } } = await sb.auth.getUser();
    if (!user) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
    }

    // Vérifier que c'est un staff
    const { data: me } = await sb
      .from("staff_users")
      .select("is_staff")
      .eq("user_id", user.id)
      .maybeSingle();

    if (!me?.is_staff) {
      return NextResponse.json({ error: "Forbidden" }, { status: 403 });
    }

    const searchParams = request.nextUrl.searchParams;
    const contractId = searchParams.get("contract_id");

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

    // Récupérer le contrat pour vérifier s'il est mono-mois
    const { data: contract, error: contractError } = await sb
      .from("cddu_contracts")
      .select("start_date, end_date")
      .eq("id", contractId)
      .single();

    if (contractError || !contract) {
      return NextResponse.json({ error: "Contrat non trouvé" }, { status: 404 });
    }

    // Déterminer si le contrat est mono-mois
    const contractStartDate = new Date(contract.start_date);
    const contractEndDate = new Date(contract.end_date);
    const isMultiMonth = contractStartDate.getMonth() !== contractEndDate.getMonth() || 
                         contractStartDate.getFullYear() !== contractEndDate.getFullYear();

    console.log("[GET /api/staff/payslips/check-existing] Contract:", {
      contractId,
      start_date: contract.start_date,
      end_date: contract.end_date,
      isMultiMonth
    });

    // Si le contrat est multi-mois, pas besoin de bloquer
    if (isMultiMonth) {
      return NextResponse.json({ 
        has_existing: false,
        is_multi_month: true
      });
    }

    // Vérifier si une paie existe déjà pour ce contrat mono-mois
    const { data: payslips, error } = await sb
      .from("payslips")
      .select("id, period_month")
      .eq("contract_id", contractId)
      .limit(1);

    if (error) {
      console.error("[GET /api/staff/payslips/check-existing] Database error:", error);
      return NextResponse.json({ error: "Database error" }, { status: 500 });
    }

    const hasExisting = payslips && payslips.length > 0;

    if (hasExisting) {
      const monthYear = new Date(payslips[0].period_month).toLocaleDateString('fr-FR', { 
        month: 'long', 
        year: 'numeric' 
      });
      
      return NextResponse.json({ 
        has_existing: true,
        is_multi_month: false,
        message: `Une fiche de paie existe déjà pour ce contrat mono-mois (${monthYear})`
      });
    }

    return NextResponse.json({ 
      has_existing: false,
      is_multi_month: false
    });
  } catch (error) {
    console.error("[GET /api/staff/payslips/check-existing] Error:", error);
    return NextResponse.json({ error: "Internal server error" }, { status: 500 });
  }
}
