import { http, unwrapApiResponse, type ApiEnvelope } from '@/shared/api/http' import type { TurnoverQuery, TurnoverResponse } from '../turnoverTypes' import type { BusinessPage, BusinessQuery, Dashboard, DashboardQuery, DailyResponse, InventoryMetric, InventoryQuery, Metric, Overview, OwnerOption, OwnerOverview, OwnerOverviewQuery, OwnerQuery, RetryCommand, RetryResult, Run, RuntimePage, RuntimeQuery, SalesSummary, Scope, TaskDetail } from '../types' const base = '/platform/v1/last-leg/self-operated-analytics' async function get(path: string, params: object, signal?: AbortSignal): Promise { const response = await http.get, ApiEnvelope>(`${base}/${path}`, { params, signal }) return unwrapApiResponse(response) } export const analyticsApi = { ownerDirectory: (query: { sourceAccount: string; warehouseCode: string } & Partial, signal?: AbortSignal) => get('owner-directory', query, signal), async turnover(query: TurnoverQuery, signal?: AbortSignal): Promise { const response = await http.get, ApiEnvelope>(`${base}/inventory-turnover`, { params: query, paramsSerializer: { indexes: null }, signal }) return unwrapApiResponse(response) }, dashboard: (query: DashboardQuery, signal?: AbortSignal) => get('dashboard', query, signal), owners: (query: OwnerQuery, signal?: AbortSignal) => get>('owners', query, signal), ownerOverview: (query: OwnerOverviewQuery, signal?: AbortSignal) => get('owner-overview', query, signal), summary: (query: BusinessQuery, signal?: AbortSignal) => get>('sku-sales-summary', query, signal), daily: (query: BusinessQuery, signal?: AbortSignal) => get('sku-daily-sales', query, signal), hot: (query: BusinessQuery, signal?: AbortSignal) => get>('hot-skus', query, signal), slow: (query: BusinessQuery, signal?: AbortSignal) => get>('slow-skus', query, signal), inventory: (query: InventoryQuery, signal?: AbortSignal) => get>('inventory-coverage', query, signal), overview: (sourceAccount: string, warehouseCode?: string, signal?: AbortSignal) => get('sync-overview', { sourceAccount, warehouseCode }, signal), tasks: (query: RuntimeQuery, signal?: AbortSignal) => get>('sync-tasks', query, signal), task: (scope: Scope, taskNo: string, signal?: AbortSignal) => get(`sync-tasks/${encodeURIComponent(taskNo)}`, scope, signal), runs: (query: RuntimeQuery, signal?: AbortSignal) => get>('sync-runs', query, signal), async retry(command: RetryCommand, signal?: AbortSignal): Promise { const response = await http.post, ApiEnvelope>(`${base}/sync-tasks`, command, { signal }) return unwrapApiResponse(response) }, }