import type { FormRules } from 'element-plus'


export const rules = (marketForm: any, row?: any, isEdit?: boolean): FormRules => {
    return {
        email: [
            { required: true, message: '请输入邮箱地址', trigger: ['blur', 'change'] },
            { type: 'email', message: '请输入正确的邮箱格式', trigger: ['blur', 'change'] }
        ],
        phone: [
            {
                validator: (rule, value, callback) => {
                    // 验证国家码必填
                    if (!marketForm.countryCode) {
                        return callback(new Error('请选择国家/地区码'));
                    }
                    // 验证手机号必填
                    if (!value) {
                        return callback(new Error('请输入手机号码'));
                    }
                    // 中国大陆手机号格式验证（仅+86时生效）
                    if (marketForm.countryCode === '+86' && !/^1[3-9]\d{9}$/.test(value)) {
                        return callback(new Error('请输入正确的中国大陆手机号'));
                    }
                    callback();
                },
                trigger: ['blur', 'change']
            }
        ],
        accountName: [
            { required: true, message: '请输入账号名称', trigger: 'blur' }
        ],
        is_base_ts: [
            { required: true, message: '请选择是否为承接特殊做市', trigger: 'blur' }
        ],
        base_ts: [
            { required: true, message: '请选择承接特殊做市', trigger: 'blur' }
        ],
        level: [
            { required: !isEdit, message: '请选择等级', trigger: 'change' }
        ],
        parentAccountName: [
            { required: !isEdit, message: '请选择上级账号', trigger: 'change' }
        ],
        riskControlTemplate: [
            { required: true, message: '请选择风控模板', trigger: 'change' }
        ],
        positionRatio: [
            { required: true, message: '请输入头寸', trigger: 'blur' },
            {
                validator: (rule, value, callback) => {
                    // 空值已经由 required 校验处理
                    if (value === '' || value === undefined || value === null) {
                        return callback();
                    }

                    // 尝试转换为数字
                    const numValue = Number(value);
                    // 转换失败 → 不是有效数字
                    if (isNaN(numValue)) {
                        return callback(new Error('头寸必须为数字'));
                    }
                     // 范围校验（0-100）
                    if (numValue < 0 || numValue > 100) {
                        return callback(new Error('头寸需在0-100之间'));
                    }

                    // 精度校验（最多2位小数）
                    if (!/^\d+(\.\d{1,2})?$/.test(value.toString())) {
                        return callback(new Error('头寸最多保留2位小数'));
                    }

                    // // 不超过上级最大头寸校验
                    // if (marketForm.maxPositionRatio && numValue > Number(marketForm.maxPositionRatio)) {
                    //     return callback(new Error(`头寸不能超过上级账户的最大头寸(${marketForm.maxPositionRatio})`));
                    // }

                    callback();
                },
                trigger: ['blur', 'change']
            }
        ],
        commissionRatio: [
            { required: true, message: '请输入手续费比例', trigger: 'blur' },
            {
                validator: (rule, value, callback) => {
                    if (value === '' || value === undefined || value === null) {
                        return callback();
                    }

                    const numValue = Number(value);

                    if (isNaN(numValue)) {
                        return callback(new Error('手续费比例必须为数字'));
                    }

                    // 范围校验（0-100）
                    if (numValue < 0 || numValue > 100) {
                        return callback(new Error('手续费比例需在0-100之间'));
                    }

                    // 精度校验（最多2位小数）
                    if (!/^\d+(\.\d{1,2})?$/.test(value.toString())) {
                        return callback(new Error('手续费比例最多保留2位小数'));
                    }

                    // // 不超过上级最大手续费比例校验
                    // if (marketForm.maxCommissionRatio && numValue > Number(marketForm.maxCommissionRatio)) {
                    //     return callback(new Error(`手续费比例不能超过上级账户的最大比例(${marketForm.maxCommissionRatio})`));
                    // }

                    callback();
                },
                trigger: ['blur', 'change']
            }
        ],
        assignedPointDifference: [
            { required: true, message: '请输入点差', trigger: 'blur' },
            {
                validator: (rule, value, callback) => {
                    if (value === '' || value === undefined || value === null) {
                        return callback()
                    }

                    const numValue = Number(value)

                    // 1. 基础数字校验
                    if (isNaN(numValue)) {
                        return callback(new Error('点差必须为数字'))
                    }
                    if (numValue < 0) {
                        return callback(new Error('点差不能为负数'))
                    }
                    if (!/^\d+(\.\d{1,2})?$/.test(value.toString())) {
                        return callback(new Error('点差最多保留2位小数'))
                    }

                    // 2. 核心校验：已分配点差 ≤ 可分配点差
                    if (row && row.pointDifference !== undefined) {
                        const maxPointDiff = Number(row.pointDifference)
                        if (numValue > maxPointDiff) {
                            return callback(new Error(`可分配点差为(${maxPointDiff})`))
                        }
                    }

                    callback()
                },
                trigger: ['blur', 'change']
            }
        ],
    }
}