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(),
            authCode: $('#authCode').val(),
            authName: $('#authName').val(),
            authType: $('#authType').val(),
            authLevel: $('#authLevel').val(),
            privilegeCode: $('#privilegeCode').val(),
            privilegeName: $('#privilegeName').val(),
            privilegeType: $('#privilegeType').val(),
            privilegeLevel: $('#privilegeLevel').val(),
            privilegeIconsId: $('.privilegeIconsId').val(),
            parentId: $('#parentId').val(),
            parentAuthName: $('#parentAuthName').val(),
            userGender: $('input[name="userGender"]:checked').val(),
            privilegeState: $('#privilegeState').val(),
            privilegeStatus:$('#privilegeStatus').val(),
            sort: $('#sort').val(),
            state:$('#state').val(),
            status:$('#status').val(),
            delFlag:$('#delFlag').val(),
            remark: $('#remark').val()
        };
    }

    /**
     * 关闭弹窗并刷新父页面
     */
    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/permission/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 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; // 阻止表单默认提交
    });
});