import type { Task, TaskDetail, TaskCreateInput, Column, MergeResult, Settings } from "@hai/core"; async function api(path: string, opts: RequestInit = {}): Promise { const res = await fetch(`/api${path}`, { headers: { "Content-Type": "application/json" }, ...opts, }); const data = await res.json(); if (!res.ok) throw new Error((data as { error?: string }).error || "Request failed"); return data as T; } export function fetchTasks(): Promise { return api("/tasks"); } export function fetchTaskDetail(id: string): Promise { return api(`/tasks/${id}`); } export function createTask(input: TaskCreateInput): Promise { return api("/tasks", { method: "POST", body: JSON.stringify(input), }); } export function moveTask(id: string, column: Column): Promise { return api(`/tasks/${id}/move`, { method: "POST", body: JSON.stringify({ column }), }); } export function deleteTask(id: string): Promise { return api(`/tasks/${id}`, { method: "DELETE" }); } export function mergeTask(id: string): Promise { return api(`/tasks/${id}/merge`, { method: "POST" }); } export function fetchConfig(): Promise<{ maxConcurrent: number }> { return api<{ maxConcurrent: number }>("/config"); } export function fetchSettings(): Promise { return api("/settings"); } export function updateSettings(settings: Partial): Promise { return api("/settings", { method: "PUT", body: JSON.stringify(settings), }); }