import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MesPdProductApi } from '#/api/mes/pd/product';

import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';

/** 表单类型 */
export type FormType = 'create' | 'detail' | 'update';

/** 审批状态常量 */
export const AuditStatus = {
  DRAFT: 0, // 未提交
  PROCESS: 10, // 审批中
  APPROVE: 20, // 审核通过
  REJECT: 30, // 审核不通过
} as const;

/** 新增/修改产品档案 */
export function useFormSchema(): VbenFormSchema[] {
  return [
    {
      fieldName: 'id',
      component: 'Input',
      dependencies: {
        triggerFields: [''],
        show: () => false,
      },
    },
    {
      fieldName: 'archiveType',
      label: '档案类型',
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: getDictOptions(DICT_TYPE.MES_PD_PRODUCT_ARCHIVE_TYPE, 'number'),
        placeholder: '请选择档案类型',
      },
      rules: 'selectRequired',
    },
    {
      fieldName: 'name',
      label: '档案名称',
      component: 'Input',
      componentProps: {
        placeholder: '请输入档案名称',
      },
      rules: 'required',
    },
    {
      fieldName: 'spec',
      label: '规格型号',
      component: 'Input',
      componentProps: {
        placeholder: '请输入规格型号',
      },
    },
    {
      fieldName: 'unit',
      label: '单位',
      component: 'Input',
      componentProps: {
        placeholder: '请输入单位',
      },
    },
    {
      fieldName: 'price',
      label: '基准价格',
      component: 'InputNumber',
      componentProps: {
        class: '!w-full',
        min: 0,
        precision: 2,
        placeholder: '请输入基准价格',
      },
    },
    {
      fieldName: 'status',
      label: '启用状态',
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: getDictOptions(DICT_TYPE.MES_PD_PRODUCT_STATUS, 'number'),
        placeholder: '请选择启用状态',
      },
    },
    {
      fieldName: 'remark',
      label: '备注',
      component: 'Textarea',
      formItemClass: 'col-span-3',
      componentProps: {
        placeholder: '请输入备注',
        rows: 2,
      },
    },
  ];
}

/** 列表的搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {
  return [
    {
      fieldName: 'archiveType',
      label: '档案类型',
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: getDictOptions(DICT_TYPE.MES_PD_PRODUCT_ARCHIVE_TYPE, 'number'),
        placeholder: '请选择档案类型',
      },
    },
    {
      fieldName: 'name',
      label: '档案名称',
      component: 'Input',
      componentProps: {
        placeholder: '请输入档案名称',
      },
    },
    {
      fieldName: 'auditStatus',
      label: '审批状态',
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: getDictOptions(DICT_TYPE.MES_PD_AUDIT_STATUS, 'number'),
        placeholder: '请选择审批状态',
      },
    },
  ];
}

/** 列表的字段 */
export function useGridColumns(): VxeTableGridOptions<MesPdProductApi.Product>['columns'] {
  return [
    { field: 'code', title: '档案编码', width: 150 },
    { field: 'name', title: '档案名称', minWidth: 160 },
    {
      field: 'archiveType',
      title: '档案类型',
      width: 110,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_PD_PRODUCT_ARCHIVE_TYPE },
      },
    },
    { field: 'spec', title: '规格型号', width: 140 },
    { field: 'unit', title: '单位', width: 80 },
    {
      field: 'price',
      title: '基准价格',
      width: 100,
      formatter: 'formatNumber',
    },
    {
      field: 'auditStatus',
      title: '审批状态',
      width: 110,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_PD_AUDIT_STATUS },
      },
    },
    { field: 'auditRemark', title: '审批意见', width: 150 },
    {
      field: 'createTime',
      title: '创建时间',
      width: 170,
      formatter: 'formatDateTime',
    },
    {
      title: '操作',
      width: 260,
      fixed: 'right',
      slots: {
        default: 'actions',
      },
    },
  ];
}
