// Bridge between AuthContext (owner of the access token) and api-client
// (needs it on every request). AuthContext registers getters/setters here
// on mount; api-client reads them. Avoids circular imports + lets us
// de-duplicate concurrent 401 refreshes via a shared in-flight promise.

let getAccessToken = () => null
let runRefresh = async () => null
let onUnauthenticated = () => {}

let refreshInFlight = null

export const registerAuthBridge = ({ getAccessToken: g, runRefresh: r, onUnauthenticated: u }) => {
  getAccessToken = g
  runRefresh = r
  onUnauthenticated = u
}

export const readAccessToken = () => getAccessToken()

export const refreshAccessToken = async () => {
  if (!refreshInFlight) {
    refreshInFlight = (async () => {
      try {
        return await runRefresh()
      } finally {
        refreshInFlight = null
      }
    })()
  }
  return refreshInFlight
}

export const notifyUnauthenticated = () => onUnauthenticated()
