import { createEveningDetectiveServerClient, type EveningDetectiveServer } from '.'

export function buildClient(getToken?: () => string | null): EveningDetectiveServer {
  return createEveningDetectiveServerClient(createHttpHandler(getToken))
}

export function createHttpHandler(
  getToken?: () => string | null,
): (request: { path: string; method: string; body: string | null }) => Promise<unknown> {
  return async (request: { path: string; method: string; body: string | null }) => {
    const baseURL = getURL()

    // Формируем полный URL
    const url = `${baseURL}/${request.path}`

    // Подготавливаем заголовки
    const headers: Record<string, string> = {
      'Content-Type': 'application/json',
    }

    // Добавляем токен, если он есть
    const token = getToken?.()
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }

    // Делаем запрос
    const response = await fetch(url, {
      method: request.method,
      headers,
      body: request.body, // body уже JSON-строка из генератора
    })

    if (response.status == 401) {
      throw new Error('unauthorized')
    }

    // Парсим ответ
    const data = await response.json()

    // Возвращаем в формате, который ожидает генератор
    return data
  }
}

export function getURL(): string {
  const url = import.meta.env.VITE_API_URL || 'http://localhost:8090'
  // console.log(url)
  return url
}
