let accessToken: string | null = null

export const tokenStore = {
  get: () => accessToken,
  set: (token: string) => { accessToken = token },
  clear: () => { accessToken = null },
}

const REFRESH_URL = 'https://app.auth.elcsa.ru/v1/jwt/refresh'

export async function refreshAccessToken(): Promise<string> {
  const { getCsrfToken, clearCsrfCache } = await import('./csrf')
  // CSRF-токен мог истечь вместе с access-токеном (та же причина 401), поэтому
  // сбрасываем кэш и запрашиваем свежий CSRF — и для самого refresh, и для
  // последующего повтора исходного запроса.
  clearCsrfCache()
  const csrf = await getCsrfToken()
  const res = await fetch(REFRESH_URL, {
    method: 'POST',
    credentials: 'include',
    headers: { 'X-CSRF-Token': csrf },
  })
  if (!res.ok) throw new Error('Unauthorized')
  const data = await res.json()
  if (data.access_token) {
    tokenStore.set(data.access_token)
  }
  return (data.access_token ?? data.result ?? true) as string
}
