// Мост токена авторизации в сетевой слой. Модули src/api/* — обычные функции,
// и хук useAppAuth() в них вызвать нельзя, поэтому текущий токен держим в
// модульной переменной, которую обновляет React-слой (см. AuthTokenBridge в
// auth/appAuth). В режиме anonymous токен остаётся null → заголовок Authorization
// не добавляется и сетевое поведение не меняется.

let authToken: string | null = null

/**
 * Сохранить текущий токен авторизации для последующих вызовов apiFetch.
 * @param token Токен доступа либо null, чтобы не выставлять заголовок (anonymous).
 */
export function setApiAuthToken(token: string | null): void {
  authToken = token
}

/**
 * Обёртка над fetch: при наличии токена добавляет заголовок Authorization: Bearer.
 * По сигнатуре совместима с fetch и служит drop-in заменой в модулях src/api/*.
 * @param input URL или Request, как у штатного fetch.
 * @param init Параметры запроса, как у штатного fetch.
 *
 * @returns Промис ответа сервера, идентичный результату fetch.
 */
export function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
  if (!authToken) {
    return fetch(input, init)
  }
  const headers = new Headers(init?.headers)
  if (!headers.has('Authorization')) {
    headers.set('Authorization', `Bearer ${authToken}`)
  }
  return fetch(input, { ...init, headers })
}
