import { getSession } from "next-auth/react";

// The token is read on every outgoing request, so cache it briefly and share a
// single in-flight lookup. Without this, a page that fires ten queries at once
// makes ten /api/auth/session round-trips.
const CACHE_MS = 30 * 1000;

let cachedToken = "";
let cachedAt = 0;
let inFlight: Promise<string> | null = null;

export const clearAccessTokenCache = () => {
  cachedToken = "";
  cachedAt = 0;
  inFlight = null;
};

export const getClientAccessToken = async (): Promise<string> => {
  if (typeof window === "undefined") return "";

  if (cachedAt && Date.now() - cachedAt < CACHE_MS) return cachedToken;
  if (inFlight) return inFlight;

  inFlight = getSession()
    .then((session) => {
      cachedToken = session?.user?.accessToken ?? "";
      cachedAt = Date.now();
      return cachedToken;
    })
    .catch(() => "")
    .finally(() => {
      inFlight = null;
    });

  return inFlight;
};
