import type { VbenFormProps } from '#/adapter/form';

import dayjs from 'dayjs';
import { getOrderPrescriptionTypeOption } from '#/views/business/order/product-order/api';

import { PRESCRIPTION_IS_ONLINE_OPTIONS } from './constants';

export const formOptions: VbenFormProps = {
  // 默认收起只显示第一行，点「展开」看全部筛选（占位最小化）
  collapsed: true,
  commonConfig: {
    // label 默认 100px，本页筛选名最长 4 字，收窄到 70px 让控件占满格子（否则控件被挤得只剩一半宽）
    labelWidth: 70,
    // antd Select/RangePicker 默认按内容收缩，统一撑满格子，保证一行里各控件等宽整齐
    componentProps: {
      class: 'w-full',
    },
  },
  // 响应式多列：抽出 grid 后 vben form 默认单列（一行一个字段），必须显式给栅格
  wrapperClass: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5',
  schema: [
    {
      // 放第一位：时间范围有默认值（本月至今），默认收起时必须始终可见，否则用户不知道当前查的是哪段数据
      component: 'RangePicker',
      componentProps: {
        format: 'YYYY-MM-DD',
        // 提交纯日期，后端 getWhereBetween 会把结束日扩到当天 23:59:59
        valueFormat: 'YYYY-MM-DD',
      },
      defaultValue: [
        dayjs().startOf('month').format('YYYY-MM-DD'),
        dayjs().format('YYYY-MM-DD'),
      ],
      fieldName: 'search_time',
      label: '时间范围',
    },
    {
      // 统一 antd 系控件：与 ApiSelect 同一套视觉（此前 VbenInput 是 shadcn 风格，高度圆角不一致）
      component: 'Input',
      componentProps: {
        allowClear: true,
        placeholder: '输入订单号',
      },
      defaultValue: '',
      fieldName: 'prescription_no',
      label: '订单号',
    },
    {
      // 与商品订单共用后端 ProductTypeEnum 开方类型，保证筛选项完整
      component: 'ApiSelect',
      componentProps: {
        allowClear: true,
        filterOption: true,
        showSearch: true,
        afterFetch: (data: { id: number; name: string }[]) => {
          return data.map((item) => ({
            label: item.name,
            value: item.id,
          }));
        },
        api: getOrderPrescriptionTypeOption,
        placeholder: '请选择',
      },
      fieldName: 'prescription_type',
      label: '订单类型',
    },
    {
      // 就诊人姓名/手机号模糊（后端 PersonKeywordScopeService，whereHas 关联表）
      component: 'Input',
      componentProps: {
        allowClear: true,
        placeholder: '姓名/手机号',
      },
      fieldName: 'patient_keyword',
      label: '就诊人',
    },
    {
      // 医生姓名/手机号模糊（后端 PersonKeywordScopeService）
      component: 'Input',
      componentProps: {
        allowClear: true,
        placeholder: '姓名/手机号',
      },
      fieldName: 'doctor_keyword',
      label: '医生',
    },
    {
      // 处方来源（后端 queryField 等值匹配；选项与 constants 映射同语义）
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: PRESCRIPTION_IS_ONLINE_OPTIONS,
        placeholder: '请选择',
      },
      fieldName: 'is_online',
      label: '处方来源',
    },
  ],
  // 控制表单是否显示折叠按钮
  showCollapseButton: true,
  submitButtonOptions: {
    content: '查询',
  },
  // 按下回车时是否提交表单
  // 任意输入框回车即搜索；下拉面板打开时的回车只选中选项（core 层已处理），第二次回车才搜索
  submitOnEnter: true,
};
