import type { FormRules } from 'element-plus'

/**
 * 数字校验函数：必须为数字 + 小数位不超过5位
 * @param fieldName 字段名称（用于错误提示）
 * @returns 校验规则函数
 */
const validateMaxFiveDecimals = (fieldName: string) => {
  return (rule: any, value: any, callback: any) => {
    // 1. 空值处理：undefined/null/空字符串直接通过（如需必填可单独加required规则）
    if (value === undefined || value === null || value === '') {
      return callback()
    }

    // 2. 先校验是否为有效数字（覆盖字符串数字、纯数字、负数等场景）
    const num = Number(value)
    if (isNaN(num)) {
      return callback(new Error(`${fieldName}必须输入有效数字`))
    }

    // 3. 校验小数位是否超过5位
    const valueStr = value.toString()
    // 处理科学计数法（如 1e5）的情况，转为普通数字字符串
    if (valueStr.includes('e') || valueStr.includes('E')) {
      return callback(new Error(`${fieldName}不支持科学计数法格式，请输入普通数字`))
    }

    const decimalPart = valueStr.split('.')[1]
    if (decimalPart && decimalPart.length > 5) {
      return callback(new Error(`${fieldName}小数位不能超过5位`))
    }

    // 4. 所有校验通过
    callback()
  }
}

export const rules = (): FormRules => {
  return {
    // 名称
    varietyName: [{ required: true, message: '请输入名称', trigger: ['blur', 'change'] }],
    // 编号
    varietyCode: [{ required: true, message: '请输入编号', trigger: ['blur', 'change'] }],
    // 所属交易时间
    tradeTime: [{ required: true, message: '请选择交易时间', trigger: ['blur', 'change'] }],
    // 最大点差
    maxPoint: [
      { required: true, message: '请输入最大点差', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('最大点差'), trigger: ['blur', 'change'] },
    ],
    // 最小点差
    minPoint: [
      { required: true, message: '请输入最小点差', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('最小点差') },
    ],
    // 合约大小
    contractSize: [
      { required: true, message: '请输入合约大小', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('合约大小') },
    ],
    // 多头库存费
    longStockFee: [
      { required: true, message: '请输入多头库存费', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('多头库存费') },
    ],
    // 空头库存费
    shortStockFee: [
      { required: true, message: '请输入空头库存费', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('空头库存费') },
    ],
    // 预付款对冲
    prepaymentHedge: [
      { required: true, message: '请输入预付款对冲', trigger: ['blur', 'change'] },

      { validator: validateMaxFiveDecimals('预付款对冲') },
    ],
    // 预付款百分比
    prepaymentPercent: [
      { required: true, message: '请输入预付款百分比', trigger: ['blur', 'change'] },

      { validator: validateMaxFiveDecimals('预付款百分比') },
    ],
    // 小数位
    decimalPlaces: [
      { required: true, message: '请输入小数位', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('小数位') },
    ],
    // 点差小数位
    pointDecimalPlaces: [
      { required: true, message: '请输入点差小数位', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('点差小数位') },
    ],
    // 止盈水平
    profitLevel: [
      { required: true, message: '请输入止盈水平', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('止盈水平') },
    ],
    // 单位
    unit: [{ required: true, message: '请输入单位', trigger: ['blur', 'change'] }],
    // 最小波动
    minFlux: [
      { required: true, message: '请输入最小波动', trigger: ['blur', 'change'] },
      { validator: validateMaxFiveDecimals('最小波动') },
    ],
    // 类型
    type: [{ required: true, message: '请选择类型', trigger: ['blur', 'change'] }],
    // 上传图片
    imageUrl: [{ required: true, message: '请上传图片', trigger: ['blur', 'change'] }],
    // 库存费收取时间
    feeInventoryTime: [
      { required: true, message: '请选择库存费收取时间', trigger: ['blur', 'change'] },
    ],
    group_id: [{ required: true, message: '请选择交易分组', trigger: ['blur', 'change'] }],
  }
}