// 导入Vben表单配置类型
import type {VbenFormProps} from '#/adapter/form';

// 导入供应商选项API
import {getSupplierOption} from '#/views/system/supplier/api';
// 导入分类树API和分区选项API
import {getDrugCategoriesTree, getZoneOptions} from '#/views/business/product/drug-categories/api';

/**
 * 保健食品管理表单配置
 * 用于新增和编辑保健食品的弹窗表单
 * 注意：
 * 1. 已移除function字段（药品主治功能），因为保健食品不需要功效字段
 * 2. 已移除对应症状（indications）、使用时间（time_id）、使用方法（type_id）、频率（frequency_id）字段，因为保健食品不需要这些字段
 */
export const modalFormProps: VbenFormProps = {
  // 表单布局：12栅格系统
  wrapperClass: 'grid-cols-12',
  // 通用配置
  commonConfig: {
    // 所有表单项默认占满整行（12列）
    formItemClass: 'col-span-12',
    // 所有表单项的组件属性
    componentProps: {
      class: 'w-full',
    },
  },
  // 表单布局方式：水平布局
  layout: 'horizontal',
  // 表单字段配置数组
  schema: [
    {
      // ID字段：隐藏字段，用于编辑时标识记录
      component: 'VbenInput',
      fieldName: 'id',
      label: 'ID',
      formItemClass: 'col-span-6',
      dependencies: {
        show: false, // 隐藏显示
        triggerFields: ['id'],
      },
    },
    {
      // 显示选择字段：隐藏字段，用于内部逻辑控制
      component: 'VbenInput',
      fieldName: 'showSelect',
      label: 'ID',
      formItemClass: 'col-span-6',
      dependencies: {
        show: false, // 隐藏显示
        triggerFields: ['id'],
      },
    },
    {
      // 产品图片字段：必填，用于上传保健食品的主图
      component: 'Avatar',
      fieldName: 'image',
      label: '产品图片',
      rules: 'required', // 必填验证
      formItemClass: 'col-span-6',
    },
    {
      // 所属供应商字段：必填，下拉选择供应商
      component: 'ApiSelect',
      componentProps: {
        allowClear: true, // 允许清空
        showSearch: true, // 显示搜索框
        // 自定义过滤逻辑：根据供应商名称进行搜索
        filterOption: (input: string, option: any) => {
          return option?.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        // 接口返回数据转换为options格式
        afterFetch: (data: { id: number; name: string }[]) => {
          return data.map((item: any) => ({
            label: item.name,
            value: item.id,
          }));
        },
        api: getSupplierOption, // 调用供应商选项API
        placeholder: '请选择',
      },
      fieldName: 'supplier_id',
      formItemClass: 'col-span-6',
      label: '所属供应商',
      rules: 'required', // 必填验证
    },
    {
      // 所属分区字段：可选，下拉选择分区
      component: 'ApiSelect',
      componentProps: {
        api: getZoneOptions,
        labelField: 'title',
        valueField: 'id',
        placeholder: '请选择分区',
        allowClear: true,
      },
      fieldName: 'zone_id',
      formItemClass: 'col-span-6',
      label: '所属分区',
    },
    {
      // 所属分类字段：可选，树形下拉选择分类（联动分区）
      component: 'ApiTreeSelect',
      componentProps: {
        api: getDrugCategoriesTree,
        childrenField: 'children',
        labelField: 'category_name',
        valueField: 'id',
        placeholder: '请先选择分区',
        allowClear: true,
        treeDefaultExpandAll: true,
        immediate: false,  // 首次不立即加载
        alwaysLoad: true,  // 每次展开都重新加载
      },
      fieldName: 'category_id',
      formItemClass: 'col-span-6',
      label: '所属分类',
      dependencies: {
        componentProps(values, formApi) {
          return {
            // 使用 beforeFetch 在请求发出前动态获取最新的 zone_id
            beforeFetch: async () => {
              const currentValues = await formApi.getValues();
              return { zone_id: currentValues.zone_id };
            },
            placeholder: values.zone_id ? '请选择分类' : '请先选择分区',
          };
        },
        trigger(values, formApi) {
          // zone_id 变化时清空分类选择
          formApi.setFieldValue('category_id', undefined);
        },
        triggerFields: ['zone_id'],
      },
    },
    {
      // 保健食品昵称字段：必填，保健食品的常用名称
      component: 'VbenInput',
      componentProps: {
        placeholder: '请输入保健食品昵称',
      },
      fieldName: 'drug_name',
      formItemClass: 'col-span-6',
      label: '保健食品昵称',
      rules: 'required', // 必填验证
    },
    {
      // 保健食品别名字段：必填，保健食品的其他名称
      component: 'VbenInput',
      componentProps: {
        placeholder: '请输入保健食品别名',
      },
      fieldName: 'drug_alias',
      formItemClass: 'col-span-6',
      label: '保健食品别名',
      rules: 'required', // 必填验证
    },
    {
      // 保健食品编号字段：必填，保健食品的唯一编号
      component: 'VbenInput',
      componentProps: {
        placeholder: '请输入保健食品编号',
      },
      fieldName: 'drug_number',
      formItemClass: 'col-span-6',
      label: '保健食品编号',
      rules: 'required', // 必填验证
    },
    {
      // 规格字段：必填，保健食品的规格信息
      component: 'VbenInput',
      componentProps: {
        placeholder: '请输入规格',
      },
      fieldName: 'specification',
      formItemClass: 'col-span-6',
      label: '规格',
      rules: 'required', // 必填验证
    },
    {
      // 单位字段：必填，下拉选择单位选项
      component: 'VbenSelect',
      componentProps: {
        options: [], // 选项通过动态加载填充
        placeholder: '请选择',
      },
      fieldName: 'unit_id',
      formItemClass: 'col-span-6',
      label: '单位',
      rules: 'required', // 必填验证
    },
    // 注意：已移除使用时间（time_id）、使用方法（type_id）、频率（frequency_id）字段，因为保健食品不需要这些字段
    {
      // 商品状态字段：必填，单选按钮组，选择商品状态
      component: 'RadioGroup',
      componentProps: {
        placeholder: '请选择',
        options: [
          {
            label: '草稿',
            value: 1,
          },
          {
            label: '下架',
            value: 2,
          },
          {
            label: '上架',
            value: 3,
          },
        ],
      },
      defaultValue: 1, // 默认值为草稿
      formItemClass: 'col-span-12',
      fieldName: 'status',
      label: '商品状态',
      rules: 'required', // 必填验证
    },
    {
      // 是否处方药字段：必填，单选按钮组，选择是否为处方药
      component: 'RadioGroup',
      componentProps: {
        placeholder: '请选择',
        options: [
          {
            label: '是',
            value: 0,
          },
          {
            label: '否',
            value: 1,
          },
        ],
      },
      defaultValue: 1, // 默认值为否
      formItemClass: 'col-span-12',
      fieldName: 'is_otc',
      label: '是否处方药',
      rules: 'required', // 必填验证
    },
    // 注意：已移除function字段（药品主治功能）和对应症状（indications）字段，因为保健食品不需要这些字段
    {
      // 产品说明书字段：必填，用于上传保健食品的说明书图片
      component: 'Avatar',
      fieldName: 'instruction',
      label: '产品说明书',
      rules: 'required', // 必填验证
      formItemClass: 'col-span-6',
    },
    {
      // 商品介绍图字段：可选，支持上传多张图片，最多20张
      component: 'UploadImageSortable',
      fieldName: 'introduction_images',
      label: '商品介绍图',
      formItemClass: 'col-span-12',
      componentProps: {
        maxCount: 20, // 最多上传20张图片
        multiple: true, // 支持多选
      },
    },
  ],
  // 不显示默认的表单操作按钮（确认、取消），由弹窗组件控制
  showDefaultActions: false,
};

/**
 * Excel上传表单配置
 * 用于批量导入保健食品数据的弹窗表单
 */
export const uploadExcelProps: VbenFormProps = {
  // 表单布局：12栅格系统
  wrapperClass: 'grid-cols-12',
  // 通用配置
  commonConfig: {
    // 所有表单项默认占满整行（12列）
    formItemClass: 'col-span-12',
    // 所有表单项的组件属性
    componentProps: {
      class: 'w-full',
    },
  },
  // 表单布局方式：水平布局
  layout: 'horizontal',
  // 表单字段配置数组
  schema: [
    {
      // Excel文件上传字段：必填，用于选择要导入的Excel文件
      component: 'Upload',
      componentProps: {
        placeholder: '请选择',
        multiple: true, // 支持多选（虽然通常只上传一个文件）
      },
      fieldName: 'frequency_id',
      formItemClass: 'col-span-12',
      label: '导入excel',
      rules: 'file', // 文件验证规则
    },
  ],
  // 不显示默认的表单操作按钮（确认、取消），由弹窗组件控制
  showDefaultActions: false,
};
