import { bootGateDecision, isSiteConfigured } from './install.js';

let configuredMemo = false;

/** Test-only reset — module memo must not leak across vitest cases. */
export function resetBootGateMemoForTests(): void {
  configuredMemo = false;
}

export async function runBootGate(
  ctx: { url: URL },
  deps: {
    loadSiteConfigured: () => Promise<unknown>;
  },
): Promise<Response | null> {
  let configured = configuredMemo;
  if (!configured) {
    try {
      if (isSiteConfigured(await deps.loadSiteConfigured())) {
        configuredMemo = true;
        configured = true;
      }
    } catch {
      // fail-open: route as configured this request; leave memo unset
      configured = true;
    }
  }
  const redirect = bootGateDecision(ctx.url.pathname, configured);
  if (redirect) return Response.redirect(new URL(redirect, ctx.url), 302);
  return null;
}
