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

import { computed } from 'vue';

import dayjs from 'dayjs';

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: {
          input: {
            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, slots: {} },
  {
    field: 'timestamps',
    title: $t('abp.IoTDBBase.Timestamps'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'formattedTimestamps',
    title: $t('abp.IoTDBBase.FormattedTimestamps'),
    minWidth: '150',
    formatter: ({ cellValue }) => {
      return cellValue ? dayjs(cellValue).format('YYYY-MM-DD HH:mm:ss') : '';
    },
  },
  {
    field: 'deviceType',
    title: $t('abp.IoTDBBase.DeviceType'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'ioTDataType',
    title: $t('abp.IoTDBBase.IoTDataType'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'deviceAddress',
    title: $t('abp.IoTDBBase.DeviceAddress'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'platformTenantId',
    title: $t('abp.CTWingLog.PlatformTenantId'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'serviceId',
    title: $t('abp.CTWingLog.ServiceId'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'messageType',
    title: $t('abp.CTWingLog.MessageType'),
    minWidth: 180,
    slots: {},
  },
  {
    field: 'protocol',
    title: $t('abp.CTWingLog.Protocol'),
    minWidth: 100,
    slots: {},
  },
  {
    field: 'rawMessage',
    title: $t('abp.CTWingLog.RawMessage'),
    minWidth: 200,
    slots: {},
  },
  {
    field: 'receivedPayload',
    title: $t('abp.CTWingLog.ReceivedPayload'),
    minWidth: 200,
    slots: {},
  },
  {
    field: 'receivedTime',
    title: $t('abp.CTWingLog.ReceivedTime'),
    minWidth: 150,
    slots: {},
    formatter: ({ cellValue }) => {
      return cellValue ? dayjs(cellValue).format('YYYY-MM-DD HH:mm:ss') : '';
    },
  },
  {
    field: 'imsi',
    title: $t('abp.CTWingLog.IMSI'),
    minWidth: 150,
    slots: {},
  },
  {
    field: 'imei',
    title: $t('abp.CTWingLog.IMEI'),
    minWidth: 150,
    slots: {},
  },
]);
