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

import { DictionaryApi } from '#/api';

export const useSearchSchema = (): VbenFormSchema[] => {
  return [
    {
      component: 'Input',
      fieldName: 'code',
      label: '编码',
    },
    {
      component: 'Input',
      fieldName: 'name',
      label: '名称',
    },
  ];
};

export function useColumns(
  onActionClick?: OnActionClickFn<DictionaryApi.RecordItem>,
): VxeTableGridOptions<DictionaryApi.RecordItem>['columns'] {
  return [
    { title: '序号', type: 'seq', width: 50 },
    { align: 'left', field: 'code', title: '编码', width: 120 },
    { align: 'left', field: 'name', title: '名称', width: 200 },
    { align: 'left', field: 'sort', title: '排序', width: 60 },
    { align: 'left', field: 'remark', title: '备注' },
    {
      field: 'status',
      title: '状态',
      width: 82,
      cellRender: { name: 'CellTag' },
    },
    {
      align: 'right',
      cellRender: {
        attrs: {
          nameField: 'code',
          nameTitle: '字典项',
          onClick: onActionClick,
        },
        name: 'CellAction',
        options: [
          {
            code: 'edit',
            auth: ['dict:edit'],
          },
          {
            code: 'delete',
            auth: ['dict:delete'],
          },
        ],
      },
      field: 'operation',
      fixed: 'right',
      headerAlign: 'center',
      showOverflow: false,
      title: '操作',
      width: 100,
    },
  ];
}

export const useSchema = (): VbenFormSchema[] => {
  return [
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入编码',
      },
      fieldName: 'code',
      label: '编码',
      rules: 'required',
    },
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入名称',
      },
      fieldName: 'name',
      label: '名称',
      rules: 'required',
    },
    {
      component: 'InputNumber',
      componentProps: {
        placeholder: '请输入排序',
      },
      fieldName: 'sort',
      label: '排序',
      rules: 'required',
    },
    {
      component: 'Textarea',
      componentProps: {
        placeholder: '请输入',
      },
      fieldName: 'remark',
      label: '备注',
    },
  ];
};
