"use client"; import { useCallback, useEffect, useState } from "react"; export function useApi(url: string, deps: unknown[] = []) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const refetch = useCallback(async () => { setLoading(true); setError(null); try { const res = await fetch(url, { cache: "no-store" }); const json = await res.json(); if (!res.ok) throw new Error(json.error || `HTTP ${res.status}`); setData(json as T); } catch (e) { setError(e instanceof Error ? e.message : "Request failed"); } finally { setLoading(false); } }, [url]); const post = useCallback( async (body?: any) => { const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: body ? JSON.stringify(body) : undefined, }); const json = await res.json(); if (!res.ok) throw new Error(json.error || `HTTP ${res.status}`); return json; }, [url], ); useEffect(() => { refetch(); }, [refetch, ...deps]); return { data, loading, error, refetch, post }; }