import type {
  OnActionClickFn,
  VbenFormSchema,
  VxeTableGridOptions,
} from '#/adapter';

import { LogApi } from '#/api';

export const useSearchSchema = (): VbenFormSchema[] => {
  return [
    {
      component: 'RangePicker',
      fieldName: '__date',
      label: '日期',
      componentProps: {
        format: 'YYYY-MM-DD HH:mm:ss',
        placeholder: ['开始时间', '结束时间'],
        showTime: { format: 'HH:mm:ss' },
      },
    },
  ];
};

export function useColumns(
  onActionClick?: OnActionClickFn<LogApi.RecordItem>,
): VxeTableGridOptions<LogApi.RecordItem>['columns'] {
  return [
    { title: '序号', type: 'seq', width: 50 },
    { align: 'left', field: 'tableName', title: '表名', width: 120 },
    { align: 'left', field: 'columnName', title: '列名', width: 120 },
    { align: 'left', field: 'newValue', title: '新值', width: 100 },
    { align: 'left', field: 'oldValue', title: '旧值', width: 100 },
    { align: 'left', field: 'operate', title: '操作方式', width: 80 },
    { align: 'left', field: 'auditTime', title: '审计时间', width: 150 },
    { align: 'left', field: 'account', title: '账号', width: 100 },
    { align: 'left', field: 'realName', title: '姓名' },
    {
      align: 'right',
      cellRender: {
        attrs: {
          nameField: 'tableName',
          nameTitle: '表名',
          onClick: onActionClick,
        },
        name: 'CellAction',
        options: [
          {
            code: 'view',
            label: '详情',
            auth: ['logAudit:edit'],
          },
        ],
      },
      field: 'operation',
      fixed: 'right',
      headerAlign: 'center',
      showOverflow: false,
      title: '操作',
      width: 50,
    },
  ];
}

export function useDifferenceColumns(): VxeTableGridOptions<LogApi.RecordItem>['columns'] {
  return [
    { title: '序号', type: 'seq', width: 50 },
    {
      align: 'left',
      field: 'beforeData',
      title: '操作前记录',
      width: 150,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'afterData',
      title: '操作后记录',
      width: 150,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'sql',
      title: 'SQL',
      width: 100,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'parameters',
      title: '参数',
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'businessData',
      title: '业务对象',
      width: 100,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'diffType',
      title: '差异操作',
      width: 80,
    },
    {
      align: 'left',
      field: 'elapsed',
      title: '耗时',
      width: 80,
    },
  ];
}

export function useExceptionColumns(
  onActionClick?: OnActionClickFn<LogApi.RecordItem>,
): VxeTableGridOptions<LogApi.RecordItem>['columns'] {
  return [
    { title: '序号', type: 'seq', width: 50 },
    { align: 'left', field: 'httpMethod', title: '请求方式', width: 80 },
    {
      align: 'left',
      field: 'requestUrl',
      title: '请求地址',
      width: 250,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'requestParam',
      title: '请求参数',
      width: 100,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'returnResult',
      title: '返回结果',
      showOverflow: true,
      width: 200,
    },
    {
      align: 'left',
      field: 'exception',
      title: '异常信息',
      width: 150,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'message',
      title: '日志消息',
      showOverflow: true,
    },
    {
      align: 'right',
      cellRender: {
        attrs: {
          nameField: 'requestUrl',
          nameTitle: '请求地址',
          onClick: onActionClick,
        },
        name: 'CellAction',
        options: [
          {
            code: 'view',
            label: '详情',
            // auth: ['logException:view'],
          },
        ],
      },
      field: 'operation',
      fixed: 'right',
      headerAlign: 'center',
      showOverflow: false,
      title: '操作',
      width: 50,
    },
  ];
}

export function useOperateColumns(
  onActionClick?: OnActionClickFn<LogApi.RecordItem>,
): VxeTableGridOptions<LogApi.RecordItem>['columns'] {
  return [
    { title: '序号', type: 'seq', width: 50 },
    {
      align: 'left',
      field: 'httpMethod',
      title: '请求方式',
      width: 80,
    },
    {
      align: 'left',
      field: 'requestUrl',
      title: '请求地址',
      width: 250,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'requestParam',
      title: '请求参数',
      width: 100,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'returnResult',
      title: '返回结果',
      showOverflow: true,
      width: 200,
    },
    {
      align: 'left',
      field: 'exception',
      title: '异常信息',
      width: 150,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'message',
      title: '日志消息',
      showOverflow: true,
    },
    {
      align: 'right',
      cellRender: {
        attrs: {
          nameField: 'requestUrl',
          nameTitle: '请求地址',
          onClick: onActionClick,
        },
        name: 'CellAction',
        options: [
          {
            code: 'view',
            label: '详情',
            // auth: ['logOperate:view'],
          },
        ],
      },
      field: 'operation',
      fixed: 'right',
      headerAlign: 'center',
      showOverflow: false,
      title: '操作',
      width: 50,
    },
  ];
}

export function useVisitColumns(): VxeTableGridOptions<LogApi.RecordItem>['columns'] {
  return [
    { title: '序号', type: 'seq', width: 50 },
    {
      align: 'left',
      field: 'controllerName',
      title: '模块名称',
      width: 120,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'actionName',
      title: '方法名称',
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'displayTitle',
      title: '显示名称',
      width: 100,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'status',
      title: '执行状态',
      showOverflow: true,
      width: 80,
    },
    {
      align: 'left',
      field: 'remoteIp',
      title: 'IP地址',
      width: 80,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'location',
      title: '登录地点',
      width: 100,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'browser',
      title: '浏览器',
      showOverflow: true,
      width: 100,
    },
    {
      align: 'left',
      field: 'elapsed',
      title: '操作用时',
      width: 80,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'logDateTime',
      title: '日志时间',
      width: 120,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'account',
      title: '账号',
      width: 120,
      showOverflow: true,
    },
    {
      align: 'left',
      field: 'realName',
      title: '姓名',
      width: 120,
    },
  ];
}
