// 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<TimeSeriesResponse> { // <-- 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<MonthlyKPI> {
  const qs = new URLSearchParams(params as Record<string, string>);
  const res = await fetch(`${API}/kpi/monthly?${qs.toString()}`, { cache: "no-store" });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}
