export type AnalysisRow = { icon?: string; left: string; right: string; right_style?: string; }; export type Candidate = { commodity_code: number; path: string; reason?: string; }; export type SelectedDetails = { commodity_code: number; path: string; segment_code?: number; family_code?: number; class_code?: number; commodity_title?: string; commodity_definition?: string; }; export type ChatResponse = { status: "found" | "choose" | "not_found"; summary: string; commodity_code: number | null; candidates: Candidate[]; analysis_rows: AnalysisRow[]; form_intro: string; selected_details?: SelectedDetails; error?: string; }; const base = () => (import.meta.env.VITE_API_BASE as string | undefined)?.replace(/\/$/, "") ?? ""; export async function chatApi(body: { message: string; selected_commodity_code?: number | null; }): Promise { const url = `${base()}/api/chat`; const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ message: body.message ?? "", selected_commodity_code: body.selected_commodity_code ?? null, }), }); if (!res.ok) { const t = await res.text(); throw new Error(t || `HTTP ${res.status}`); } return res.json() as Promise; }