import { supabase } from "@/integrations/supabase/client";

interface InvitationPayload {
  tripId: string;
  email: string;
  travelerName: string;
}

export interface InvitationResult {
  associated?: boolean;
  invitationId?: string;
  message?: string;
}

async function getInvocationErrorMessage(error: unknown) {
  if (typeof error === "object" && error !== null && "context" in error) {
    const context = (error as { context?: unknown }).context;
    if (context instanceof Response) {
      try {
        const body = await context.clone().json() as { error?: unknown };
        if (typeof body.error === "string") return body.error;
      } catch {
        // A non-JSON response is reported with the safe fallback below.
      }
    }
  }
  return "Impossible de contacter le service d’invitation. Vérifiez votre connexion puis réessayez.";
}

export async function inviteTraveler({ tripId, email, travelerName }: InvitationPayload) {
  const payload = {
    tripId: tripId.trim(),
    email: email.trim().toLowerCase(),
    travelerName: travelerName.trim(),
  };
  const { data, error } = await supabase.functions.invoke<InvitationResult>("invite-user", {
    body: payload,
  });
  if (error) throw new Error(await getInvocationErrorMessage(error));
  return data;
}
