/*
// 功能：前台提示消息脚本文件
// 作者：启肯科技
// Q Q：328493711
// 微信：13738373177（同手机）
// 官网：http://www.qiken.com
// 说明：QKCMS-轻量级AI智能内容管理建站系统
// 版权：© 2025 温州启肯网络有限公司 保留所有权利，盗版必究。
*/

// 统一的提示框函数
// 定义showToast函数 - 支持持久化显示
(function() {
    if (typeof window.pageRefreshing === 'undefined') {
        window.pageRefreshing = false;
        window.currentToast = null;
    }
})();

// 监听页面刷新事件
window.addEventListener('beforeunload', function () {
    window.pageRefreshing = true;
});


// 使用网站现有的全局提示框showToast，将类型设置为自定义的banned类型
function showBannedToast() {
    return showToast('你的账号已封禁', 'banned', 2000);
}

function showToast(message, options) {
    // 支持两种参数格式：
    // 1. showToast(message, type, duration, persistent, onHideCallback)
    // 2. showToast(message, {type, duration, autoHide, callback})
    let type = 'success';
    let duration = 2000;
    let persistent = false;
    let onHideCallback = null;

    // 如果第二个参数是对象，则解析对象中的选项
    if (typeof options === 'object' && options !== null) {
        type = options.type || type;
        duration = options.duration || duration;
        persistent = options.autoHide === false || persistent;
        onHideCallback = options.callback || onHideCallback;
    } else {
        // 向后兼容原有的位置参数格式
        type = options || type;
        duration = arguments[2] !== undefined ? arguments[2] : duration;
        persistent = arguments[3] !== undefined ? arguments[3] : persistent;
        onHideCallback = arguments[4] !== undefined ? arguments[4] : onHideCallback;
    }
    // 不再使用localStorage进行持久化存储，因为这会导致页面刷新后重复显示提示框
    // 我们只显示一个临时提示框，让用户立即看到反馈

    // 如果页面正在刷新，不显示任何临时提示
    if (window.pageRefreshing) {
        return null;
    }

    // 检查是否已存在toast容器，如果没有则创建
    let toastContainer = document.getElementById('toast-container');
    if (!toastContainer) {
        toastContainer = document.createElement('div');
        toastContainer.id = 'toast-container';
        document.body.appendChild(toastContainer);
    }
    // 确保设置高z-index，显示在所有模态弹窗之上
    toastContainer.style.zIndex = '10001';

    // 清空容器，确保只显示一个提示框
    toastContainer.innerHTML = '';

    // 创建toast元素
    const toast = document.createElement('div');
    toast.className = `toast toast-${type}`;
    toast.textContent = message;
    const typeColorMap = {
        success: 'rgba(29, 156, 76, 0.85)',
        error: 'rgba(255, 69, 0, 0.85)',
        warning: 'rgba(245, 158, 11, 1)',
        info: 'rgba(0, 0, 0, 0.85)',
        banned: 'rgba(155, 89, 182, 0.85)'
    };
    toast.style.backgroundColor = typeColorMap[type] || typeColorMap.info;

    // 添加到容器
    toastContainer.appendChild(toast);

    // 保存当前toast引用
    window.currentToast = toast;

    // 添加动画效果
    setTimeout(() => {
        if (window.currentToast === toast) {
            toast.classList.add('toast-visible');
        }
    }, 10);

    // 设置自动消失
    setTimeout(() => {
        toast.classList.remove('toast-visible');
        setTimeout(() => {
            if (toastContainer.contains(toast)) {
                toastContainer.removeChild(toast);
            }
            // 调用消失回调函数
            if (typeof onHideCallback === 'function') {
                onHideCallback();
            }
        }, 300);
    }, duration);

    return toast;
}

// 由于我们不再使用localStorage进行持久化存储，这个函数已被简化
// 但保留函数定义以保持向后兼容性
function checkPersistentToast() {
    // 不再执行任何操作
    return;
}

// 实际显示持久化提示的内部函数已被简化
function _showPersistentToast() {
    // 不再执行任何操作
    return;
}

// 页面加载时调用检查函数（保持向后兼容性）
document.addEventListener('DOMContentLoaded', function () {
    checkPersistentToast();
});

// 定义overrideAlert函数
function overrideAlert() {
    window.alert = function (message) {
        showToast(message, 'info');
    };
}

// 定义confirmDialog函数
function confirmDialog(message, onConfirm, onCancel = null) {
    const existingContainers = document.querySelectorAll('#confirm-container');
    existingContainers.forEach(container => {
        if (document.body.contains(container)) {
            document.body.removeChild(container);
        }
    });

    let confirmContainer = document.createElement('div');
    confirmContainer.id = 'confirm-container';
    confirmContainer.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 10000;';
    confirmContainer.style.transition = 'opacity 0.3s ease, visibility 0.3s ease';
    document.body.appendChild(confirmContainer);

    const confirmDialog = document.createElement('div');
    confirmDialog.className = 'confirm-dialog';

    const headerDiv = document.createElement('div');
    headerDiv.className = 'confirm-header';

    const iconDiv = document.createElement('div');
    iconDiv.className = 'confirm-icon';
    iconDiv.innerHTML = '<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10" fill="#f59e0b"/><path d="M12 7V13" stroke="white" stroke-width="2.5" stroke-linecap="round"/><path d="M12 16V16.01" stroke="white" stroke-width="2.5" stroke-linecap="round"/></svg>';

    const messageDiv = document.createElement('div');
    messageDiv.className = 'confirm-message';
    messageDiv.textContent = message;

    headerDiv.appendChild(iconDiv);
    headerDiv.appendChild(messageDiv);

    const bodyDiv = document.createElement('div');
    bodyDiv.className = 'confirm-body';

    const buttonsDiv = document.createElement('div');
    buttonsDiv.className = 'confirm-buttons';

    const cancelBtn = document.createElement('button');
    cancelBtn.className = 'confirm-btn cancel-btn';
    cancelBtn.textContent = '取消';
    cancelBtn.onclick = function () {
        confirmDialog.classList.remove('confirm-visible');
        confirmContainer.style.opacity = '0';
        confirmContainer.style.visibility = 'hidden';
        if (document.body.contains(confirmContainer)) {
            document.body.removeChild(confirmContainer);
        }
        if (onCancel) {
            onCancel();
        }
    };

    const confirmBtn = document.createElement('button');
    confirmBtn.className = 'confirm-btn';
    confirmBtn.textContent = '确定';
    confirmBtn.onclick = function () {
        confirmDialog.classList.remove('confirm-visible');
        confirmContainer.style.opacity = '0';
        confirmContainer.style.visibility = 'hidden';
        if (document.body.contains(confirmContainer)) {
            document.body.removeChild(confirmContainer);
        }
        if (onConfirm) {
            onConfirm();
        }
    };

    buttonsDiv.appendChild(cancelBtn);
    buttonsDiv.appendChild(confirmBtn);
    bodyDiv.appendChild(buttonsDiv);

    confirmDialog.appendChild(headerDiv);
    confirmDialog.appendChild(bodyDiv);

    confirmContainer.appendChild(confirmDialog);

    setTimeout(() => {
        confirmDialog.classList.add('confirm-visible');
    }, 10);

    return confirmDialog;
}

// 覆盖默认的confirm函数
function overrideConfirm() {
    window.confirm = function (message) {
        // 由于confirm是阻塞函数，这里使用Promise无法完全模拟其行为
        // 所以我们创建一个自定义的非阻塞确认框
        confirmDialog(message, function () {
            // 用户确认后的回调
        }, function () {
            // 用户取消后的回调
        });

        // 为了兼容原有的confirm函数，这里返回一个默认值
        return true;
    };
}

// 同时支持CommonJS模块导出和传统的全局变量使用方式
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
    // CommonJS模块导出
    module.exports = {
        showToast,
        showBannedToast,
        overrideAlert,
        confirmDialog,
        overrideConfirm
    };
} else {
    // 浏览器环境，直接暴露为全局变量
    window.showToast = showToast;
    window.showBannedToast = showBannedToast;
    window.overrideAlert = overrideAlert;
    window.confirmDialog = confirmDialog;
    window.overrideConfirm = overrideConfirm;
}
