import { api } from './client'; export interface DeviceWithSite { id: string; name: string; externalId: string; isActive: boolean; siteId: string; siteName: string; } export interface RawMeasurementRow { time: string; deviceName: string; siteName: string | null; activePowerKw: number; reactivePowerKvar: number | null; apparentPowerKva: number | null; powerFactor: number | null; voltageV: number | null; frequencyHz: number | null; energyImportedKwh: number | null; energyExportedKwh: number | null; } export interface RawMeasurementsPage { totalCount: number; limit: number; offset: number; rows: RawMeasurementRow[]; } export async function listAllDevices(): Promise { const { data } = await api.get('/sites/devices'); return data; } export async function fetchRawMeasurements(params: { fromUtc: string; toUtc: string; deviceIds?: string[]; limit?: number; offset?: number; }): Promise { const { data } = await api.get('/measurements/raw', { params: { from: params.fromUtc, to: params.toUtc, deviceIds: params.deviceIds && params.deviceIds.length > 0 ? params.deviceIds.join(',') : undefined, limit: params.limit, offset: params.offset, }, }); return data; } export function downloadRawMeasurementsExport(params: { fromUtc: string; toUtc: string; deviceIds?: string[]; rowCap?: number; }) { const q = new URLSearchParams({ from: params.fromUtc, to: params.toUtc, }); if (params.deviceIds && params.deviceIds.length > 0) q.set('deviceIds', params.deviceIds.join(',')); if (params.rowCap) q.set('rowCap', String(params.rowCap)); window.location.href = `/api/measurements/raw/export.xlsx?${q.toString()}`; }