// app/utils/api.ts export interface TimeSeriesEntry { time: string; value: number; } export interface TimeSeriesResponse { consumption: TimeSeriesEntry[]; generation: TimeSeriesEntry[]; } const API_URL = process.env.NEXT_PUBLIC_FASTAPI_URL ; export const crmapi = { getProjects: async () => { const res = await fetch(`${API_URL}/crm/projects`, { }); if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }, }; export async function fetchPowerTimeseries( site: string, start: string, end: string ): Promise { // <-- Change here const params = new URLSearchParams({ site, start, end }); const res = await fetch(`${API_URL}/power-timeseries?${params.toString()}`); if (!res.ok) { throw new Error(`Failed to fetch data: ${res.status}`); } const json = await res.json(); console.log(`🔍 API response from /power-timeseries?${params.toString()}:`, json); // ✅ log here return json; // <-- This is a single object, not an array } export async function fetchForecast( lat: number, lon: number, dec: number, az: number, kwp: number ): Promise<{ time: string; forecast: number }[]> { const query = new URLSearchParams({ lat: lat.toString(), lon: lon.toString(), dec: dec.toString(), az: az.toString(), kwp: kwp.toString(), }).toString(); const res = await fetch(`${API_URL}/forecast?${query}`); if (!res.ok) throw new Error("Failed to fetch forecast"); return res.json(); } export type MonthlyKPI = { site: string; month: string; // "YYYY-MM" yield_kwh: number | null; consumption_kwh: number | null; grid_draw_kwh: number | null; efficiency: number | null; // 0..1 (fraction) peak_demand_kw: number | null; avg_power_factor: number | null; // 0..1 load_factor: number | null; // 0..1 error?: string; }; const API = process.env.NEXT_PUBLIC_FASTAPI_URL; export async function fetchMonthlyKpi(params: { site: string; month: string; // "YYYY-MM" consumption_topic?: string; generation_topic?: string; }): Promise { const qs = new URLSearchParams(params as Record); const res = await fetch(`${API}/kpi/monthly?${qs.toString()}`, { cache: "no-store" }); if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }