import { ApiResponse } from "@/types/api"; import { FrameDataResponse } from "@/features/visualization/types"; const BASE_URL = process.env.NEXT_PUBLIC_API_URL || "https://sid385-fill-the-frames.hf.space/api/v1"; export const visualizationClient = { getAvailableVariables: async (fileId: string): Promise> => { const response = await fetch(`${BASE_URL}/visualization/${fileId}/variables`); if (!response.ok) { throw new Error(`Failed to get variables with status ${response.status}`); } return response.json(); }, getFrame: async (fileId: string, variable: string, timeIndex: number = 0): Promise> => { const response = await fetch( `${BASE_URL}/visualization/${fileId}/frame?variable=${encodeURIComponent(variable)}&time_index=${timeIndex}` ); if (!response.ok) { throw new Error(`Failed to get frame with status ${response.status}`); } return response.json(); }, getBounds: async (fileId: string, variable: string = "C13"): Promise> => { const response = await fetch(`${BASE_URL}/visualization/${fileId}/bounds?variable=${encodeURIComponent(variable)}`); if (!response.ok) { throw new Error(`Failed to get bounds with status ${response.status}`); } return response.json(); }, getLayerUrl: (fileId: string, variable: string, timestamp: number = 0): string => { return `${BASE_URL}/visualization/${fileId}/layer?variable=${encodeURIComponent(variable)}×tamp=${timestamp}`; }, getErrorMapLayerUrl: (fileId1: string, fileId2: string, variable: string, timestamp: number = 0): string => { return `${BASE_URL}/visualization/error-map/layer?actual_file_id=${fileId1}&ai_file_id=${fileId2}&variable=${encodeURIComponent(variable)}×tamp=${timestamp}`; } };