// app/(app)/staff/contrats/[id]/page.tsx
import { createSbServer } from "@/lib/supabaseServer";
import ContractEditor from "@/components/staff/contracts/ContractEditor";

export default async function Page({ params }: { params: { id: string } }) {
  const sb = createSbServer();

  const { data: { user }, error: authError } = await sb.auth.getUser();
  if (authError || !user) {
    return (
      <div className="p-8 text-sm text-muted-foreground">
        Veuillez vous connecter (accès staff requis).
      </div>
    );
  }

  // Vérifie l'appartenance au staff via la table staff_users (source de vérité du projet)
  const { data: me } = await sb
    .from("staff_users")
    .select("is_staff")
    .eq("user_id", user.id)
    .maybeSingle();

  if (!me?.is_staff) {
    return (
      <div className="p-8 text-sm text-muted-foreground">
        Accès refusé — réservé au staff.
      </div>
    );
  }

  // Charge le contrat et ses payslips avec la session utilisateur (RLS doit autoriser le staff)
  const { data: contract, error: cErr } = await sb
    .from("cddu_contracts")
    .select("*, salaries!employee_id(salarie, nom, prenom, adresse_mail, code_salarie)")
    .eq("id", params.id)
    .single();

  if (cErr || !contract) {
    return (
      <div className="p-8">
        Impossible de charger le contrat (introuvable ou accès refusé).
      </div>
    );
  }

  const { data: payslips, error: pErr } = await sb
    .from("payslips")
    .select("*")
    .eq("contract_id", params.id)
    .order("pay_number", { ascending: true });

  if (pErr) {
    return (
      <div className="p-8">
        Contrat chargé, mais échec de chargement des payslips: {pErr.message}
      </div>
    );
  }

  // Récupérer les informations d'organisation avec la CCN
  let organizationDetails = null;
  
  // Essayons plusieurs champs possibles pour l'ID d'organisation
  const orgId = contract.organization_id || contract.client_organization_id || contract.org_id;
  
  if (orgId) {
    const { data: orgData, error: orgError } = await sb
      .from("organizations")
      .select(`
        *,
        organization_details!inner(*)
      `)
      .eq("id", orgId)
      .single();

    if (orgData && !orgError) {
      organizationDetails = {
        id: orgData.id,
        name: orgData.name,
        organization_details: orgData.organization_details
      };
    }
  }

  return <ContractEditor 
    contract={contract} 
    payslips={payslips ?? []} 
    organizationDetails={organizationDetails}
  />;
}