"use client"; import { useMemo } from "react"; import { useAuth } from "@/context/AuthContext"; const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? ""; type JsonValue = any; export function useApi() { const { token } = useAuth(); return useMemo(() => { function authHeaders(extra?: HeadersInit): HeadersInit { const base: Record = {}; if (token) base.Authorization = `Bearer ${token}`; return { ...base, ...(extra as any) }; } async function get(path: string, init?: RequestInit) { return fetch(`${API_BASE_URL}${path}`, { ...init, headers: authHeaders(init?.headers), }); } async function post(path: string, body: JsonValue, init?: RequestInit) { return fetch(`${API_BASE_URL}${path}`, { method: "POST", ...init, headers: authHeaders({ "Content-Type": "application/json", ...(init?.headers as any), }), body: JSON.stringify(body), }); } async function put(path: string, body: JsonValue, init?: RequestInit) { return fetch(`${API_BASE_URL}${path}`, { method: "PUT", ...init, headers: authHeaders({ "Content-Type": "application/json", ...(init?.headers as any), }), body: JSON.stringify(body), }); } async function del(path: string, init?: RequestInit) { return fetch(`${API_BASE_URL}${path}`, { method: "DELETE", ...init, headers: authHeaders(init?.headers), }); } // ✅ stable reference unless token changes return { get, post, put, del }; }, [token]); }