import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';

import { DICT_TYPE } from '#/packages/constants/src';
import { getDictOptions } from '#/packages/effects/hooks/src';

export type TaskFormType = 'create' | 'detail' | 'dispatch' | 'update';

export function useTaskGridFormSchema(): VbenFormSchema[] {
  return [
    {
      fieldName: 'code',
      label: '任务编码',
      component: 'Input',
      componentProps: { placeholder: '请输入任务编码' },
    },
    {
      fieldName: 'taskName',
      label: '任务名称',
      component: 'Input',
      componentProps: { placeholder: '请输入任务名称' },
    },
    {
      fieldName: 'status',
      label: '任务状态',
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: getDictOptions(DICT_TYPE.MES_PD_TASK_STATUS, 'number'),
        placeholder: '请选择任务状态',
      },
    },
  ];
}

export function useTaskGridColumns(): VxeTableGridOptions['columns'] {
  return [
    { field: 'code', title: '任务编码', minWidth: 130 },
    { field: 'taskName', title: '任务名称', minWidth: 140 },
    { field: 'assigneeName', title: '执行人', minWidth: 100 },
    {
      field: 'status',
      title: '状态',
      minWidth: 100,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_PD_TASK_STATUS },
      },
    },
    {
      field: 'planFinishDate',
      title: '计划完成',
      minWidth: 120,
      formatter: 'formatDate',
    },
    {
      field: 'createTime',
      title: '创建时间',
      minWidth: 160,
      formatter: 'formatDateTime',
    },
    {
      field: 'action',
      title: '操作',
      width: 200,
      fixed: 'right',
      slots: { default: 'actions' },
    },
  ];
}

export function useTaskFormSchema(formType: TaskFormType): VbenFormSchema[] {
  const readonly = formType === 'detail';
  return [
    {
      fieldName: 'id',
      component: 'Input',
      dependencies: { triggerFields: [''], show: () => false },
    },
    {
      fieldName: 'projectId',
      component: 'Input',
      dependencies: { triggerFields: [''], show: () => false },
    },
    {
      fieldName: 'code',
      label: '任务编码',
      component: 'Input',
      componentProps: { disabled: readonly, placeholder: '请输入任务编码' },
      rules: 'required',
    },
    {
      fieldName: 'taskName',
      label: '任务名称',
      component: 'Input',
      componentProps: { disabled: readonly, placeholder: '请输入任务名称' },
      rules: 'required',
    },
    {
      fieldName: 'assigneeName',
      label: '执行人',
      component: 'Input',
      componentProps: { disabled: readonly, placeholder: '请输入执行人' },
    },
    {
      fieldName: 'planFinishDate',
      label: '计划完成',
      component: 'DatePicker',
      componentProps: { disabled: readonly, class: 'w-full', valueFormat: 'x' },
    },
    {
      fieldName: 'remark',
      label: '备注',
      component: 'Textarea',
      componentProps: { disabled: readonly, placeholder: '请输入备注', rows: 3 },
    },
  ];
}

export function useTaskDispatchSchema(): VbenFormSchema[] {
  return [
    {
      fieldName: 'id',
      component: 'Input',
      dependencies: { triggerFields: [''], show: () => false },
    },
    {
      fieldName: 'assigneeName',
      label: '执行人',
      component: 'Input',
      componentProps: { placeholder: '请输入执行人姓名' },
      rules: 'required',
    },
    {
      fieldName: 'planFinishDate',
      label: '计划完成',
      component: 'DatePicker',
      componentProps: { class: 'w-full', valueFormat: 'x' },
    },
    {
      fieldName: 'remark',
      label: '分发说明',
      component: 'Textarea',
      componentProps: { placeholder: '请输入分发说明', rows: 3 },
    },
  ];
}
