import type { VxeGridProps } from '#/adapter/vxe-table';

import { computed } from 'vue';

import { getCommonGetSelectList } from '#/api-client';
import { $t } from '#/locales';

export const querySchema = computed(() => [
  {
    component: 'ApiSelect',
    fieldName: 'DataBaseName',
    label: $t('abp.IoTDBBase.DataBaseName'),
    componentProps: {
      api: getCommonGetSelectList,
      params: {
        query: {
          typeName: 'BusinessSystemEnum',
        },
      },
      labelField: 'secondValue',
      valueField: 'value',
      optionsPropName: 'options',
      immediate: true,
      afterFetch: (res: any) => {
        // 确保返回的是数组格式
        if (Array.isArray(res)) {
          return res;
        }
        // 如果是包装在 items 中的，提取出来
        if (res && Array.isArray(res.items)) {
          return res.items;
        }
        // 如果是包装在 data 中的，提取出来
        if (res && Array.isArray(res.data)) {
          return res.data;
        }
        // 如果都不是，返回空数组
        return [];
      },
    },
  },
  {
    component: 'ApiSelect',
    fieldName: 'DeviceType',
    label: $t('abp.IoTDBBase.DeviceType'),
    componentProps: {
      api: getCommonGetSelectList,
      params: {
        query: {
          typeName: 'MeterTypeEnum',
        },
      },
      labelField: 'value',
      valueField: 'key',
      optionsPropName: 'options',
      immediate: true,
      afterFetch: (res: any) => {
        // 确保返回的是数组格式
        if (Array.isArray(res)) {
          return res;
        }
        // 如果是包装在 items 中的，提取出来
        if (res && Array.isArray(res.items)) {
          return res.items;
        }
        // 如果是包装在 data 中的，提取出来
        if (res && Array.isArray(res.data)) {
          return res.data;
        }
        // 如果都不是，返回空数组
        return [];
      },
    },
  },
  {
    component: 'ApiSelect',
    fieldName: 'IoTDataType',
    label: $t('abp.IoTDBBase.IoTDataType'),
    componentProps: {
      api: getCommonGetSelectList,
      params: {
        query: {
          typeName: 'IoTDBDataTypeConst',
        },
      },
      labelField: 'value',
      valueField: 'key',
      optionsPropName: 'options',
      immediate: true,
      afterFetch: (res: any) => {
        // 确保返回的是数组格式
        if (Array.isArray(res)) {
          return res;
        }
        // 如果是包装在 items 中的，提取出来
        if (res && Array.isArray(res.items)) {
          return res.items;
        }
        // 如果是包装在 data 中的，提取出来
        if (res && Array.isArray(res.data)) {
          return res.data;
        }
        // 如果都不是，返回空数组
        return [];
      },
    },
  },
  {
    component: 'DeviceSelect',
    fieldName: 'DeviceId',
    label: $t('abp.log.deviceInfo'),
    componentProps: {
      placeholder: $t('common.pleaseSelect') + $t('abp.log.deviceInfo'),
      allowClear: true,
    },
  },
  // 新增开始时间选择器
  {
    component: 'DatePicker',
    fieldName: 'StartCreationTime',
    label: '开始时间',
    componentProps: {
      placeholder: '开始时间',
      format: 'YYYY-MM-DD HH:mm:ss',
      showTime: true,
      allowClear: true,
    },
  },
  // 新增结束时间选择器
  {
    component: 'DatePicker',
    fieldName: 'EndCreationTime',
    label: '结束时间',
    componentProps: {
      placeholder: '结束时间',
      format: 'YYYY-MM-DD HH:mm:ss',
      showTime: true,
      allowClear: true,
    },
  },
]);
export const tableSchema: any = computed((): VxeGridProps['columns'] => [
  { title: $t('common.seq'), type: 'seq', width: 50 },
  {
    field: 'Timestamps',
    title: $t('abp.IoTDBBase.Timestamps'),
    minWidth: '150',
  },
  {
    field: 'DataBaseName',
    title: $t('abp.IoTDBBase.DataBaseName'),
    minWidth: '150',
  },
  {
    field: 'DeviceType',
    title: $t('abp.IoTDBBase.DeviceType'),
    minWidth: '150',
  },
  {
    field: 'IoTDataType',
    title: $t('abp.IoTDBBase.IoTDataType'),
    minWidth: '150',
  },
  {
    field: 'DeviceAddress',
    title: $t('abp.IoTDBBase.DeviceAddress'),
    minWidth: '150',
  },
]);
