import { goto } from '$app/navigation'

// API 공통 fetch 래퍼 — 세션 쿠키 자동 전송, 401 시 /login 리다이렉트
export async function apiFetch<T>(path: string, init?: RequestInit): Promise<T> {
  const res = await fetch(path, {
    credentials: 'include',
    headers: { 'Content-Type': 'application/json' },
    ...init,
  })

  if (res.status === 401) {
    goto('/login')
    throw new Error('unauthorized')
  }

  if (!res.ok) {
    const text = await res.text()
    let msg = text
    try {
      const json = JSON.parse(text)
      msg = json.error ?? text
    } catch {}
    throw new Error(msg)
  }

  // 204 No Content 처리
  if (res.status === 204) return undefined as T

  return res.json()
}
