import type { AnalysisHistoryItem, AnalysisResult, CompanyProfile, Tender, PurchaseOrder } from "./types"; const API_BASE = process.env.NEXT_PUBLIC_API_BASE ?? ""; const jsonHeaders = { "Content-Type": "application/json", }; export async function healthCheck() { const res = await fetch(`${API_BASE}/api/health`); if (!res.ok) { throw new Error("Health check failed"); } return res.json(); } export async function fetchDbStatus() { const res = await fetch(`${API_BASE}/api/health/db-status`); if (!res.ok) return null; return res.json(); } export async function searchTenders(params: { keyword?: string; buyer?: string; provider_code?: string; org_code?: string; status?: string; code?: string; date?: string; skip?: number; limit?: number; }): Promise { const query = new URLSearchParams(); if (params.keyword) query.append("keyword", params.keyword); if (params.buyer) query.append("buyer", params.buyer); if (params.provider_code) query.append("provider_code", params.provider_code); if (params.org_code) query.append("org_code", params.org_code); if (params.status) query.append("status", params.status); if (params.code) query.append("code", params.code); if (params.date) query.append("date", params.date); if (params.skip !== undefined) query.append("skip", params.skip.toString()); if (params.limit !== undefined) query.append("limit", params.limit.toString()); const res = await fetch(`${API_BASE}/api/tenders?${query.toString()}`); if (!res.ok) { throw new Error("Error searching tenders"); } return res.json(); } export async function analyzeTender( tender: Tender, companyProfile: CompanyProfile, documentText?: string, models?: Record ): Promise { const res = await fetch(`${API_BASE}/api/analyze`, { method: "POST", headers: jsonHeaders, body: JSON.stringify({ tender, company_profile: companyProfile, document_text: documentText, models: models }), }); if (!res.ok) { throw new Error("Error analyzing tender"); } return res.json(); } export async function uploadDocument(file: File): Promise<{ text: string; filename: string }> { const formData = new FormData(); formData.append("file", file); const res = await fetch(`${API_BASE}/api/upload-document`, { method: "POST", body: formData, }); if (!res.ok) { throw new Error("Error uploading document"); } return res.json(); } export async function saveCompanyProfile(profile: CompanyProfile): Promise { const res = await fetch(`${API_BASE}/api/company-profile`, { method: "POST", headers: jsonHeaders, body: JSON.stringify(profile), }); if (!res.ok) { throw new Error("Error saving company profile"); } return res.json(); } export async function fetchCompanyProfile(): Promise { const res = await fetch(`${API_BASE}/api/company-profile`); if (!res.ok) { throw new Error("No company profile available"); } return res.json(); } export async function fetchAnalysisHistory(): Promise { const res = await fetch(`${API_BASE}/api/analysis-history`); if (!res.ok) { throw new Error("Error fetching analysis history"); } return res.json(); } export async function syncDatabase() { const res = await fetch(`${API_BASE}/api/tenders/sync`, { method: "POST" }); if (!res.ok) { throw new Error("Error syncing database"); } return res.json(); } export async function scrapeTenders(keyword: string): Promise { const res = await fetch(`${API_BASE}/api/tenders/scrape?keyword=${encodeURIComponent(keyword)}`); if (!res.ok) { throw new Error("Error scraping tenders"); } return res.json(); } export async function fetchPurchaseOrders(date?: string, status: string = "todos"): Promise { const query = new URLSearchParams(); if (date) query.append("date", date); query.append("status", status); const res = await fetch(`${API_BASE}/api/purchase-orders?${query.toString()}`); if (!res.ok) { throw new Error("Error fetching purchase orders"); } return res.json(); }