import dayjs from 'dayjs' import { listPlatformTenants } from '@/modules/iam' import { listPlatformUnifiedOrders } from '@/modules/unified-orders' import { http, type ApiEnvelope, unwrapApiResponse } from '@/shared/api/http' export interface DashboardOperationalMetrics { inTransitContainerCount: number inTransitTeu: number unknownContainerTypeCount: number pendingCustomsOrderCount: number asOf: string | null } interface RawDashboardOperationalMetrics { inTransitContainerCount: number | string inTransitTeu: number | string unknownContainerTypeCount: number | string pendingCustomsOrderCount: number | string asOf?: string | null } function numberValue(value: number | string | null | undefined) { const parsed = Number(value) return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0 } export async function getDashboardOperationalMetrics(): Promise { const response = await http.get, ApiEnvelope>( '/platform/v1/first-leg/dashboard/operational-metrics', ) const data = unwrapApiResponse(response) return { inTransitContainerCount: numberValue(data.inTransitContainerCount), inTransitTeu: numberValue(data.inTransitTeu), unknownContainerTypeCount: numberValue(data.unknownContainerTypeCount), pendingCustomsOrderCount: numberValue(data.pendingCustomsOrderCount), asOf: data.asOf || null, } } export async function getTodayNewOrderCount() { const today = dayjs() const result = await listPlatformUnifiedOrders({ createdFrom: today.startOf('day').format('YYYY-MM-DDTHH:mm:ss.SSS'), createdTo: today.endOf('day').format('YYYY-MM-DDTHH:mm:ss.SSS'), page: 1, size: 1, }) return result.total } export async function getActiveCustomerCount() { const result = await listPlatformTenants({ page: 1, size: 1, status: 'ACTIVE' }) return result.total }