const API_BASE = (import.meta.env.VITE_API_URL || 'https://api.ops.ligbox.com.br').replace(/\/$/, '')

function wrapNetworkError(err) {
  const msg = String(err?.message || err || '')
  if (msg === 'Failed to fetch' || err?.name === 'TypeError') {
    return new Error(
      'Ligação à API falhou (rede/CORS). Faça Ctrl+Shift+R e confirme que está em console.ligbox.com.br.',
    )
  }
  return err instanceof Error ? err : new Error(msg || 'Erro de rede')
}

export async function apiGet(path, { token } = {}) {
  const headers = { Accept: 'application/json' }
  if (token) headers.Authorization = `Bearer ${token}`
  let res
  try {
    res = await fetch(`${API_BASE}${path}`, { headers })
  } catch (e) {
    throw wrapNetworkError(e)
  }
  if (!res.ok) {
    const err = new Error(`HTTP ${res.status}`)
    err.status = res.status
    throw err
  }
  return res.json()
}

export async function apiPost(path, body, { token } = {}) {
  const headers = { Accept: 'application/json', 'Content-Type': 'application/json' }
  if (token) headers.Authorization = `Bearer ${token}`
  let res
  try {
    res = await fetch(`${API_BASE}${path}`, {
      method: 'POST',
      headers,
      body: JSON.stringify(body),
    })
  } catch (e) {
    throw wrapNetworkError(e)
  }
  const data = await res.json().catch(() => ({}))
  if (!res.ok) {
    const err = new Error(data.detail || data.message || `HTTP ${res.status}`)
    err.status = res.status
    throw err
  }
  return data
}

export { API_BASE }
