import { fetchJson } from '../../auth/api-client'; import type { HydrogenKpi, HydrogenStationTop, HydrogenRegionShare, HydrogenMonthlyPoint, HydrogenDailyRow, HydrogenOrderResponse, HydrogenCustomerRow, HydrogenStationFull, ElectricKpi, ElectricDailyRow, ElectricMonthGroup, ElectricChargeOrderResponse, EtcOverviewResponse, EtcBillResponse, EtcTollRecordResponse, CustomerType, DateQuickPick, ElectricVehicleScope, } from './types'; const BASE = '/api/energy'; export interface HydrogenOverviewResponse { kpi: HydrogenKpi; top5: HydrogenStationTop[]; regions: HydrogenRegionShare[]; monthly: HydrogenMonthlyPoint[]; customers: HydrogenCustomerRow[]; stations: HydrogenStationFull[]; availableYears: number[]; year: number; } export function fetchHydrogenOverview(year?: number, force = false): Promise { const params = new URLSearchParams(); if (year) params.set('year', String(year)); if (force) params.set('force', '1'); const q = params.toString(); return fetchJson(`${BASE}/hydrogen/overview${q ? `?${q}` : ''}`); } export interface HydrogenDailyQuery { range?: DateQuickPick; startDate?: string; endDate?: string; stationId?: number; customerName?: string; } export function fetchHydrogenDaily(query: HydrogenDailyQuery, customer: CustomerType): Promise { const q = new URLSearchParams({ customer }); if (query.range) q.set('range', query.range); if (query.startDate) q.set('startDate', query.startDate); if (query.endDate) q.set('endDate', query.endDate); if (query.stationId !== undefined) q.set('stationId', String(query.stationId)); if (query.customerName) q.set('customerName', query.customerName); return fetchJson(`${BASE}/hydrogen/daily?${q.toString()}`); } export interface HydrogenOrderQuery { date: string; customer: CustomerType; stationId?: number; customerName?: string; page?: number; limit?: number; } export function fetchHydrogenOrders(query: HydrogenOrderQuery): Promise { const params = new URLSearchParams({ date: query.date, customer: query.customer, page: String(query.page ?? 1), limit: String(query.limit ?? 20), }); if (query.stationId !== undefined) params.set('stationId', String(query.stationId)); if (query.customerName) params.set('customerName', query.customerName); return fetchJson(`${BASE}/hydrogen/orders?${params}`); } export interface ElectricOverviewResponse { kpi: ElectricKpi; trend: ElectricDailyRow[]; latestRecordAt: string | null; } export function fetchElectricOverview(): Promise { return fetchJson(`${BASE}/electric/overview`); } export function fetchElectricMonthly(customer: ElectricVehicleScope, query: HydrogenDailyQuery = { range: 'last15' }): Promise { const q = new URLSearchParams({ customer }); if (query.range) q.set('range', query.range); if (query.startDate) q.set('startDate', query.startDate); if (query.endDate) q.set('endDate', query.endDate); return fetchJson(`${BASE}/electric/monthly?${q.toString()}`); } export function fetchElectricOrders(date: string, customer: ElectricVehicleScope): Promise { const q = new URLSearchParams({ date, customer }); return fetchJson(`${BASE}/electric/orders?${q.toString()}`); } export function fetchEtcOverview(force = false): Promise { return fetchJson(`${BASE}/etc/overview${force ? '?force=1' : ''}`); } export interface EtcListQuery { page?: number; limit?: number; startDate?: string; endDate?: string; search?: string; } function etcListParams(query: EtcListQuery): string { const params = new URLSearchParams(); if (query.page) params.set('page', String(query.page)); if (query.limit) params.set('limit', String(query.limit)); if (query.startDate) params.set('startDate', query.startDate); if (query.endDate) params.set('endDate', query.endDate); if (query.search) params.set('search', query.search); return params.toString(); } export function fetchEtcRecords(query: EtcListQuery): Promise { const params = etcListParams(query); return fetchJson(`${BASE}/etc/records${params ? `?${params}` : ''}`); } export function fetchEtcBills(query: EtcListQuery): Promise { const params = etcListParams(query); return fetchJson(`${BASE}/etc/bills${params ? `?${params}` : ''}`); }