import axios from "axios"; import type { Bill, BillAction, BillDetail, DashboardData, Follow, Member, NewsArticle, PaginatedResponse, SettingsData, TrendScore, } from "./types"; const apiClient = axios.create({ baseURL: process.env.NEXT_PUBLIC_API_URL || "", timeout: 30000, }); // Bills export const billsAPI = { list: (params?: Record) => apiClient.get>("/api/bills", { params }).then((r) => r.data), get: (id: string) => apiClient.get(`/api/bills/${id}`).then((r) => r.data), getActions: (id: string) => apiClient.get(`/api/bills/${id}/actions`).then((r) => r.data), getNews: (id: string) => apiClient.get(`/api/bills/${id}/news`).then((r) => r.data), getTrend: (id: string, days?: number) => apiClient.get(`/api/bills/${id}/trend`, { params: { days } }).then((r) => r.data), }; // Members export const membersAPI = { list: (params?: Record) => apiClient.get>("/api/members", { params }).then((r) => r.data), get: (id: string) => apiClient.get(`/api/members/${id}`).then((r) => r.data), getBills: (id: string, params?: Record) => apiClient.get>(`/api/members/${id}/bills`, { params }).then((r) => r.data), }; // Follows export const followsAPI = { list: () => apiClient.get("/api/follows").then((r) => r.data), add: (follow_type: string, follow_value: string) => apiClient.post("/api/follows", { follow_type, follow_value }).then((r) => r.data), remove: (id: number) => apiClient.delete(`/api/follows/${id}`), }; // Dashboard export const dashboardAPI = { get: () => apiClient.get("/api/dashboard").then((r) => r.data), }; // Search export const searchAPI = { search: (q: string) => apiClient.get<{ bills: Bill[]; members: Member[] }>("/api/search", { params: { q } }).then((r) => r.data), }; // Settings export const settingsAPI = { get: () => apiClient.get("/api/settings").then((r) => r.data), update: (key: string, value: string) => apiClient.put("/api/settings", { key, value }).then((r) => r.data), testLLM: () => apiClient.post("/api/settings/test-llm").then((r) => r.data), }; // Admin export const adminAPI = { triggerPoll: () => apiClient.post("/api/admin/trigger-poll").then((r) => r.data), triggerMemberSync: () => apiClient.post("/api/admin/trigger-member-sync").then((r) => r.data), triggerTrendScores: () => apiClient.post("/api/admin/trigger-trend-scores").then((r) => r.data), getTaskStatus: (taskId: string) => apiClient.get(`/api/admin/task-status/${taskId}`).then((r) => r.data), };