import { requestClient } from '#/api/request';

export namespace DecisionKpiApi {
  export interface KpiItem {
    code: string;
    name: string;
    category: string;
    unit: string;
    value: number;
    alertStatus: 'normal' | 'warn' | 'critical';
    chartType: string;
    status: number;
  }

  export interface KpiOverview {
    kpis: KpiItem[];
    total: number;
  }

  export interface KpiDefinition {
    id?: number;
    code: string;
    name: string;
    category: string;
    unit?: string;
    dataSource?: string;
    querySql?: string;
    chartType?: string;
    thresholdWarn?: number;
    thresholdCritical?: number;
    comparisonOperator?: string;
    refreshInterval?: number;
    sort?: number;
    status?: number;
    remark?: string;
  }
}

export function getKpiOverview() {
  return requestClient.get<DecisionKpiApi.KpiOverview>('/bi/decision/kpi/overview');
}

export function getKpiDetail(kpiCode: string) {
  return requestClient.get<Record<string, unknown>>(`/bi/decision/kpi/detail/${kpiCode}`);
}

export function getKpiByCategory(category: string) {
  return requestClient.get<Record<string, unknown>>(`/bi/decision/kpi/category/${category}`);
}

export function refreshKpi(kpiCode: string) {
  return requestClient.post<number>(`/bi/decision/kpi/refresh/${kpiCode}`);
}

export function getKpiDefinitionPage(params: Record<string, unknown>) {
  return requestClient.get('/bi/decision/kpi-definition/page', { params });
}

export function getKpiDefinitionList() {
  return requestClient.get('/bi/decision/kpi-definition/list-all');
}

export function getKpiDefinition(id: number) {
  return requestClient.get<DecisionKpiApi.KpiDefinition>('/bi/decision/kpi-definition/get', { params: { id } });
}

export function createKpiDefinition(data: DecisionKpiApi.KpiDefinition) {
  return requestClient.post('/bi/decision/kpi-definition/create', data);
}

export function updateKpiDefinition(data: DecisionKpiApi.KpiDefinition) {
  return requestClient.put('/bi/decision/kpi-definition/update', data);
}

export function deleteKpiDefinition(id: number) {
  return requestClient.delete('/bi/decision/kpi-definition/delete', { params: { id } });
}