import type { Category, Product, ProductSummary, SubmissionInput } from "./types"; async function req(path: string, init?: RequestInit): Promise { const res = await fetch(path, { ...init, headers: { "Content-Type": "application/json", ...(init?.headers || {}) }, }); if (!res.ok) { let msg = `请求失败 (${res.status})`; try { const body = await res.json(); if (body?.error?.message) msg = body.error.message; } catch { /* ignore */ } throw new Error(msg); } return res.json() as Promise; } export interface SearchResult { items: ProductSummary[]; page: number; size: number; total: number; } export interface SearchFilters { brand?: string; country?: string; } export const api = { search: (q: string, page = 1, size = 20, filters: SearchFilters = {}) => { const params = new URLSearchParams({ q, page: String(page), size: String(size), }); if (filters.brand) params.set("brand", filters.brand); if (filters.country) params.set("country", filters.country); return req(`/api/v1/products/search?${params.toString()}`); }, product: (id: string) => req(`/api/v1/products/${id}`), categories: () => req<{ items: Category[] }>(`/api/v1/categories`), submit: (input: SubmissionInput) => req<{ id: string; status: string }>(`/api/public/submissions`, { method: "POST", body: JSON.stringify(input), }), };