// ==UserScript==
// @name         笔点会员身份替换
// @namespace    https://AiiyiYei.com/tihuan
// @version      2026.8.10
// @description  会员替换+精准隐藏广告滑块，保留主题/排序功能按钮+,去掉新版按钮、工具、小组、整体添加等非核心内容
// @match        *://*.bidianer.com/*
// @grant        none
// @run-at       document-load
// ==/UserScript==

(function() {
    // -------------------------- 配置区 --------------------------
    const classList = [
        { target: 'vip-badge', add: 'active' },
    ];
    const textList = [
        { target: '非会员', replacement: '至尊 VIP' },
        { target: '，购买高级会员获得更多权益！', replacement: '（终身版）' },
        { target: '2021年02月26日 注册', replacement: '2014年04月15日 注册' },
    ];
    const contentSelector = '';
    // ------------------------------------------------------------

    function addHideStyle() {
        const style = document.createElement('style');
        style.textContent = `
            .layout-slider-container {
                display: block !important;
            }
            .layout-slider:has(a > img) {
                display: none !important;
            }
            .layout-slider:has(.ri-sort-desc),
            .layout-slider:has(.ri-sun-line),
            .layout-slider:has(.ri-moon-line) {
                display: block !important;
            }
            /* 隐藏体验新版按钮 */
            .el-popover__reference-wrapper .br-btn:has(.ri-arrow-up-circle-line) {
                display: none !important;
            }
            /* 隐藏小组菜单 */
            li[data-v-08e89337] a.menu-item[href="/group"] {
                display: none !important;
            }
            /* 隐藏会员付费菜单 */
            li[data-v-08e89337] a.menu-item[href="/price"] {
                display: none !important;
            }
            /* 隐藏工具菜单 */
            li.menu-split[data-v-08e89337] a.menu-item[href="/tool"] {
                display: none !important;
            }
            /* 隐藏帮助下拉菜单 */
            .el-popover__reference-wrapper .help-menu-item {
                display: none !important;
            }
            /* 精准隐藏「添加」按钮，保留同栏其他图标 */
            li.icon-item[data-v-7aa8b7d2] button:has(.ri-add-large-line) {
                display: none !important;
            }
        `;
        document.head.appendChild(style);
    }
    addHideStyle();

    function escapeRegExp(str) {
        return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function log(type, message) {
        console.log(`%c[稳定版脚本] [${type}] ${message}`, 'color: #4CAF50;');
    }

    function processClasses(element) {
        if (!element || element.nodeType !== Node.ELEMENT_NODE) return;
        classList.forEach(item => {
            if (element.classList.contains(item.target) && !element.classList.contains(item.add)) {
                element.classList.add(item.add);
                log('class替换', `成功：${item.target}`);
            }
        });
        element.childNodes.forEach(child => processClasses(child));
    }

    function processTexts(node) {
        if (node.nodeType === Node.ELEMENT_NODE) {
            const tag = node.tagName.toLowerCase();
            if (tag === 'script' || tag === 'style') return;
            if (tag === 'input' || tag === 'textarea') {
                textList.forEach(item => {
                    if (node.value.includes(item.target)) {
                        node.value = node.value.replace(new RegExp(escapeRegExp(item.target), 'g'), item.replacement);
                        log('文本替换', `输入框：${item.target} → ${item.replacement}`);
                    }
                });
            }
        }

        if (node.nodeType === Node.TEXT_NODE) {
            const firstText = textList[0];
            if (node.nodeValue.includes(firstText.target)) {
                node.nodeValue = node.nodeValue.replace(new RegExp(escapeRegExp(firstText.target), 'g'), firstText.replacement);
                log('文本替换', `第一个文本成功：${firstText.target} → ${firstText.replacement}`);
            }
            textList.slice(1).forEach(item => {
                if (node.nodeValue.includes(item.target)) {
                    node.nodeValue = node.nodeValue.replace(new RegExp(escapeRegExp(item.target), 'g'), item.replacement);
                    log('文本替换', `${item.target} → ${item.replacement}`);
                }
            });
        }

        node.childNodes.forEach(child => processTexts(child));
    }

    function fullReplace() {
        log('替换触发', '开始扫描替换...');
        let targetElement = document.body;
        if (contentSelector) {
            const container = document.querySelector(contentSelector);
            if (container) targetElement = container;
        }
        processClasses(targetElement);
        processTexts(targetElement);
    }

    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(addedNode => {
                if (addedNode.nodeType === Node.ELEMENT_NODE || addedNode.nodeType === Node.TEXT_NODE) {
                    processClasses(addedNode);
                    processTexts(addedNode);
                }
            });
        });
    });

    observer.observe(document, {
        childList: true,
        subtree: true,
        attributes: true,
        attributeFilter: ['class']
    });

    function handlePageChange() {
        log('页面切换', '检测到路由变化，启动多轮替换...');
        const delays = [300, 800, 1500, 2500, 4000];
        delays.forEach(ms => {
            setTimeout(() => {
                log('页面切换重试', `延迟${ms}ms执行替换`);
                fullReplace();
            }, ms);
        });
    }

    window.addEventListener('popstate', handlePageChange);
    window.addEventListener('hashchange', handlePageChange);
    const originalPushState = history.pushState;
    history.pushState = function(...args) {
        originalPushState.apply(this, args);
        handlePageChange();
    };

    fullReplace();
    setTimeout(fullReplace, 1000);
    setTimeout(fullReplace, 3000);
    log('启动完成', '已精准隐藏广告，保留主题/排序功能按钮');
})();