import { CrudOptions, AddReq, DelReq, EditReq, dict, CrudExpose, compute } from '@fast-crud/fast-crud'
import * as api from './api'
import { dictionary } from '/@/utils/dictionary'
import { columnPermission } from '../../../utils/columnPermission'
import { successMessage } from '../../../utils/message'

interface CreateCrudOptionsTypes {
  output: any
  crudOptions: CrudOptions
}

//此处为crudOptions配置
export const createCrudOptions = function ({
  crudExpose,
  rolePermission,
  handleDrawerOpen,
  hasPermissions,
}: {
  crudExpose: CrudExpose
  rolePermission: any
  handleDrawerOpen: Function
  hasPermissions: Function
}): CreateCrudOptionsTypes {
  const pageRequest = async (query: any) => {
    return await api.GetList(query)
  }
  const editRequest = async ({ form, row }: EditReq) => {
    form.id = row.id
    return await api.UpdateObj(form)
  }
  const delRequest = async ({ row }: DelReq) => {
    return await api.DelObj(row.id)
  }
  const addRequest = async ({ form }: AddReq) => {
    return await api.AddObj(form)
  }

  //权限判定

  // @ts-ignore
  // @ts-ignore
  return {
    crudOptions: {
      request: {
        pageRequest,
        addRequest,
        editRequest,
        delRequest,
      },
      rowHandle: {
        //固定右侧
        fixed: 'right',
        width: 320,
        buttons: {
          view: {
            show: true,
          },
          edit: {
            show: hasPermissions('role:Update'),
          },
          remove: {
            show: hasPermissions('role:Delete'),
          },
          /* custom: {
            type: 'primary',
            text: '权限配置',
            show: hasPermissions('role:Update'),
            tooltip: {
              placement: 'top',
              content: '权限配置',
            },
            click: (context: any): void => {
              const { row } = context;
              // eslint-disable-next-line no-mixed-spaces-and-tabs
              rolePermission.value.drawer = true;
              rolePermission.value.editedRoleInfo = row;
              rolePermission.value.initGet();
            },
          }, */
          customNew: {
            type: 'primary',
            text: '权限配置',
            show: hasPermissions('role:Update'),
            tooltip: {
              placement: 'top',
              content: '权限配置',
            },
            click: (context: any): void => {
              const { row } = context
              handleDrawerOpen(row)
            },
          },
        },
      },
      form: {
        col: { span: 24 },
        labelWidth: '100px',
        wrapper: {
          is: 'el-dialog',
          width: '600px',
        },
      },
      columns: {
        _index: {
          title: '序号',
          form: { show: false },
          column: {
            type: 'index',
            align: 'center',
            width: '70px',
            columnSetDisabled: true, //禁止在列设置中选择
          },
        },
        id: {
          title: 'ID',
          type: 'text',
          column: { show: false },
          search: { show: false },
          form: { show: false },
        },
        name: {
          title: '角色名称',
          type: 'text',
          search: { show: true },
          column: {
            minWidth: 120,
            sortable: 'custom',
            show: columnPermission('name', 'is_query'),
          },
          // addForm: {
          //   show: columnPermission('name', 'is_create'),
          // },
          // editForm: {
          //   show: columnPermission('name', 'is_update'),
          // },
          //  TODO: addForm 和 editForm 会合并到form中 但是columnPermission得到的永远都是false
          form: {
            show: true,
            rules: [{ required: true, message: '角色名称必填' }],
            component: {
              placeholder: '请输入角色名称',
            },
          },
        },
        key: {
          title: '权限标识',
          type: 'text',
          search: { show: false },
          column: {
            minWidth: 120,
            sortable: 'custom',
            show: columnPermission('key', 'is_query'),
            columnSetDisabled: true,
          },
          // addForm: {
          //   show: columnPermission('key', 'is_create'),
          // },
          // editForm: {
          //   show: columnPermission('key', 'is_update'),
          // },
          form: {
            show: true,
            rules: [{ required: true, message: '权限标识必填' }],
            component: {
              placeholder: '输入权限标识',
            },
          },
        },
        sort: {
          title: '排序',
          search: { show: false },
          type: 'number',
          column: {
            minWidth: 90,
            sortable: 'custom',
            show: columnPermission('sort', 'is_query'),
          },
          // addForm: {
          //   show: columnPermission('sort', 'is_create'),
          // },
          // editForm: {
          //   show: columnPermission('sort', 'is_update'),
          // },
          form: {
            show: true,
            rules: [{ required: true, message: '排序必填' }],
            value: 1,
          },
        },
        admin: {
          title: '是否管理员',
          search: { show: false },
          type: 'dict-radio',
          dict: dict({
            data: [
              {
                label: '是',
                value: true,
                color: 'success',
              },
              {
                label: '否',
                value: false,
                color: 'danger',
              },
            ],
          }),
          column: {
            minWidth: 130,
            sortable: 'custom',
            show: columnPermission('admin', 'is_query'),
          },
          addForm: {
            show: columnPermission('admin', 'is_create'),
          },
          editForm: {
            show: columnPermission('admin', 'is_update'),
          },
          form: {
            rules: [{ required: true, message: '是否管理员必填' }],
            value: false,
          },
        },
        status: {
          title: '状态',
          search: { show: true },
          type: 'dict-radio',
          column: {
            width: 100,
            component: {
              name: 'fs-dict-switch',
              activeText: '',
              inactiveText: '',
              style: '--el-switch-on-color: var(--el-color-primary); --el-switch-off-color: #dcdfe6',
              onChange: compute((context) => {
                return () => {
                  api.UpdateObj(context.row).then((res: APIResponseData) => {
                    successMessage(res.msg as string)
                  })
                }
              }),
            },
            show: columnPermission('status', 'is_query'),
          },
          // addForm: {
          //   show: columnPermission('status', 'is_create'),
          // },
          // editForm: {
          //   show: columnPermission('status', 'is_update'),
          // },
          form: {
            show: true,
            // component: {
            //   placeholder: '输入关键词搜索',
            // },
          },
          dict: dict({
            data: dictionary('button_status_bool'),
          }),
        },
        update_datetime: {
          title: '更新时间',
          type: 'text',
          search: { show: false },
          column: {
            minWidth: 170,
            sortable: 'custom',
            show: columnPermission('update_datetime', 'is_query'),
          },
          form: {
            show: false,
            component: {
              placeholder: '输入关键词搜索',
            },
          },
        },
        create_datetime: {
          title: '创建时间',
          type: 'text',
          search: { show: false },
          column: {
            sortable: 'custom',
            minWidth: 170,
            show: columnPermission('create_datetime', 'is_query'),
          },
          form: {
            show: false,
            component: {
              placeholder: '输入关键词搜索',
            },
          },
        },
        // description: {
        //     title: '备注',
        //     type: 'textarea',
        //     search: {show: false},
        //     form: {
        //         component: {
        //             maxlength: 200,
        //             placeholder: '输入备注',
        //         },
        //     },
        // },
      },
    },
  }
}
