import type { Category, KindField, 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 interface Stats { total: number; qualified: number; min_score: number; } export interface KeyResponse { email: string; api_key: string; key_prefix: string; rate_limit_per_min: number; quota_total: number; } export interface AccountInfo { email: string; key_prefix: string; rate_limit_per_min: number; quota_total: number; quota_used: number; quota_remaining: number; } export const api = { stats: () => req(`/api/v1/stats`), 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`), kindFields: (kind: string) => req<{ items: KindField[]; kind: string }>( `/api/v1/kind-fields?kind=${encodeURIComponent(kind)}`, ), submit: (input: SubmissionInput) => req<{ id: string; status: string }>(`/api/public/submissions`, { method: "POST", body: JSON.stringify(input), }), register: (email: string, password: string) => req(`/api/v1/register`, { method: "POST", body: JSON.stringify({ email, password }), }), account: (email: string, password: string) => req(`/api/v1/account`, { method: "POST", body: JSON.stringify({ email, password }), }), regenerate: (email: string, password: string) => req(`/api/v1/account/regenerate`, { method: "POST", body: JSON.stringify({ email, password }), }), };