layui.use(['form', 'layer'], function () {
    const form = layui.form;
    const layer = parent.layer === undefined ? layui.layer : top.layer;
    const $ = layui.jquery;

    /**
     * 收集表单数据
     * @returns {Object} 表单数据对象
     */
    function collectFormData() {
        return {
            id: $('#id').val(),
            loginName: $('#loginName').val(),
            userName: $('#userName').val(),
            userAddress: $('#userAddress').val(),
            userMobilePhone: $('#userMobilePhone').val(),
            userNickName: $('#userNickName').val(),
            userIdCard: $('#userIdCard').val(),
            userDesc: $('#userDesc').val(),
            userEmail: $('#userEmail').val(),
            dncnet: $('.dncnet').val(),
            userType: $('#userType').val(),
            isDifferentIpLogin: $('.isDifferentIpLogin').val(),
            userGender: $('input[name="userGender"]:checked').val(),
            userStatus: $('#userStatus').val(),
            orgTreeId: $('#orgTreeId').val(),
            remark: $('#remark').val()
        };
    }

    /**
     * 验证表单数据
     * @param {Object} formData - 表单数据
     * @returns {Object} 验证结果 {isValid: boolean, message: string}
     */
    function validateFormData(formData) {
        // 必填字段验证
        const requiredFields = ['loginName', 'userName'];
        for (const field of requiredFields) {
            if (!formData[field]?.trim()) {
                return {
                    isValid: false,
                    message: `${getFieldLabel(field)}不能为空`
                };
            }
        }

        // 邮箱格式验证
        if (formData.userEmail && !isValidEmail(formData.userEmail)) {
            return {
                isValid: false,
                message: '邮箱格式不正确'
            };
        }

        // 手机号格式验证
        if (formData.userMobilePhone && !isValidPhone(formData.userMobilePhone)) {
            return {
                isValid: false,
                message: '手机号格式不正确'
            };
        }

        return {isValid: true, message: ''};
    }

    /**
     * 获取字段显示名称
     * @param {string} fieldName - 字段名
     * @returns {string} 字段显示名称
     */
    function getFieldLabel(fieldName) {
        const labelMap = {
            loginName: '登录名',
            userName: '用户名',
            userEmail: '邮箱',
            userMobilePhone: '手机号'
        };
        return labelMap[fieldName] || fieldName;
    }

    /**
     * 验证邮箱格式
     * @param {string} email - 邮箱地址
     * @returns {boolean} 是否有效
     */
    function isValidEmail(email) {
        const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
        return emailRegex.test(email);
    }

    /**
     * 验证手机号格式
     * @param {string} phone - 手机号
     * @returns {boolean} 是否有效
     */
    function isValidPhone(phone) {
        const phoneRegex = /^1[3-9]\d{9}$/;
        return phoneRegex.test(phone);
    }

    /**
     * 关闭弹窗并刷新父页面
     */
    function closeAndReloadParent() {
        // 先关闭所有iframe弹窗
        layer.closeAll('iframe');

        // 延迟一小段时间确保弹窗完全关闭后再刷新
        setTimeout(() => {
            // 刷新父页面
            parent.location.reload();
        }, 100);
    }

    /**
     * 显示加载提示
     * @returns {number} 加载层索引
     */
    function showLoading() {
        return top.layer.msg('数据提交中，请稍候...', {
            icon: 16,
            time: false,
            shade: 0.8,
            shadeClose: false
        });
    }

    /**
     * 提交表单数据
     * @param {Object} formData - 表单数据
     * @returns {Promise} Promise对象
     */
    function submitFormData(formData) {
        return new Promise((resolve, reject) => {
            $.ajax({
                url: '/upms/sysuser/save',
                type: 'POST',
                dataType: 'json',
                contentType: 'application/json;charset=UTF-8',
                data: JSON.stringify(formData),
                timeout: 30000, // 30秒超时
                success: function (res) {
                    resolve(res);
                },
                error: function (xhr, status, error) {
                    let errorMsg = '请求失败，请稍后重试';

                    if (status === 'timeout') {
                        errorMsg = '请求超时，请稍后重试';
                    } else if (xhr.status === 403) {
                        errorMsg = '权限不足，无法执行此操作';
                    } else if (xhr.status === 500) {
                        errorMsg = '服务器内部错误';
                    }

                    reject({
                        success: false,
                        message: errorMsg,
                        originalError: error
                    });
                }
            });
        });
    }

    // 表单提交事件监听
    form.on('submit(save)', function (data) {
        // 收集表单数据
        const formData = collectFormData();

        // 验证表单数据
        const validation = validateFormData(formData);
        if (!validation.isValid) {
            layer.msg(validation.message, {icon: 2});
            return false;
        }

        // 显示加载提示
        const loadingIndex = showLoading();

        // 提交数据
        submitFormData(formData)
            .then(res => {
                layer.close(loadingIndex);

                // 根据返回结果提示用户
                if (res.code === 200) {
                    layer.msg(res.msg || '操作成功', {
                        icon: 1,
                        time: 1500
                    }, () => {
                        closeAndReloadParent();
                    });
                } else {
                    layer.msg(res.msg || '操作失败', {icon: 2});
                }
            })
            .catch(error => {
                layer.close(loadingIndex);

                // 显示错误信息
                layer.msg(error.message || '提交异常', {icon: 2});

                // 如果是网络错误，不自动关闭页面
                if (error.originalError) {
                    console.error('提交失败:', error.originalError);
                } else {
                    // 业务错误，自动关闭页面
                    setTimeout(() => {
                        closeAndReloadParent();
                    }, 2000);
                }
            });

        return false; // 阻止表单默认提交
    });

    // 可选：添加表单字段的实时验证
    function initFormValidation() {
        // 邮箱字段实时验证
        $('#userEmail').on('blur', function () {
            const email = $(this).val();
            if (email && !isValidEmail(email)) {
                layer.tips('邮箱格式不正确', this, {tips: 1});
            }
        });

        // 手机号字段实时验证
        $('#userMobilePhone').on('blur', function () {
            const phone = $(this).val();
            if (phone && !isValidPhone(phone)) {
                layer.tips('手机号格式不正确', this, {tips: 1});
            }
        });
    }

    // 初始化表单验证
    initFormValidation();
});