function getRequiredEnv(name: string, value: string | undefined) {
  if (!value) {
    throw new Error(
      `La variable d'environnement ${name} est manquante pour la configuration Supabase.`,
    );
  }

  return value;
}

export function getSupabaseUrl() {
  return getRequiredEnv(
    "NEXT_PUBLIC_SUPABASE_URL",
    process.env.NEXT_PUBLIC_SUPABASE_URL,
  );
}

export function getSupabasePublishableKey() {
  return getRequiredEnv(
    "NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY",
    process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY ??
      process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
  );
}

export function getSupabaseServiceRoleKey() {
  const serviceKey = getRequiredEnv(
    "SUPABASE_SERVICE_ROLE_KEY",
    process.env.SUPABASE_SERVICE_ROLE_KEY,
  );
  const publishableKey =
    process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY ??
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;

  if (
    serviceKey === publishableKey ||
    serviceKey.startsWith("sb_publishable_")
  ) {
    throw new Error(
      "SUPABASE_SERVICE_ROLE_KEY doit contenir une cle serveur avec privilèges élevés (sb_secret_... ou legacy service_role), pas la cle publishable publique.",
    );
  }

  return serviceKey;
}
