export type BackendEnvelope<T> = {
  ok?: boolean;
  data?: T;
  error?: string;
};

export function requiredEnvironment(name: string) {
  const value = process.env[name]?.trim();
  if (!value) throw new Error(`Configuration serveur manquante : ${name}`);
  return value;
}

export async function callPortalBackend<T>(payload: Record<string, unknown>): Promise<T> {
  const response = await fetch(requiredEnvironment("PORTAL_BACKEND_URL"), {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({
      ...payload,
      apiSecret: requiredEnvironment("PORTAL_API_SECRET"),
    }),
    redirect: "follow",
    cache: "no-store",
  });

  const text = await response.text();
  let envelope: BackendEnvelope<T>;
  try {
    envelope = JSON.parse(text) as BackendEnvelope<T>;
  } catch {
    throw new Error("Le backend Google a renvoyé une réponse illisible.");
  }

  if (!response.ok || !envelope.ok || envelope.data === undefined) {
    throw new Error(envelope.error || `Erreur backend HTTP ${response.status}`);
  }
  return envelope.data;
}

