// 背景管理器
class BackgroundManager {
    constructor() {
        this.currentBackground = null;
        this.backgrounds = [];
        this.currentVideoBg = null;
        this.init();
    }

    async init() {
        try {
            // 检查当前背景模式
            const backgroundType = localStorage.getItem('backgroundType') || 'image';
            console.log('背景管理器初始化，背景模式:', backgroundType);

            if (backgroundType === 'image') {
                // 图片模式：加载背景列表
                await this.loadBackgrounds();
                console.log('背景管理器初始化完成，背景列表长度:', this.backgrounds.length);
            } else {
                // 纯色模式：不加载背景列表
                console.log('纯色模式，跳过背景列表加载');
                this.backgrounds = [];
            }

            // 不在这里设置随机背景，由initManager.js处理背景恢复逻辑
        } catch (error) {
            console.error('背景管理器初始化失败:', error);
        }
    }

    async loadBackgrounds() {
        try {
            console.log('开始加载背景列表...');
            const timestamp = Date.now();

            // 使用当前域名下的资源
            const url = `${window.location.origin}/data/backgrounds.json?t=${timestamp}`;

            console.log('背景列表URL:', url);

            // 添加CORS处理
            const response = await fetch(url, {
                mode: 'cors',
                headers: {
                    'Accept': 'application/json'
                }
            });

            if (!response.ok) {
                throw new Error(`HTTP ${response.status}: ${response.statusText}`);
            }

            const data = await response.json();
            // 检查返回的数据格式，可能是直接是数组，也可能是包含backgrounds属性的对象
            if (data && Array.isArray(data.backgrounds)) {
                this.backgrounds = data.backgrounds;
            } else if (Array.isArray(data)) {
                this.backgrounds = data;
            } else {
                console.error('背景列表数据格式不合法', data);
                this.backgrounds = [];
            }
            console.log('背景列表加载成功，数量:', this.backgrounds.length);
            console.log('背景列表内容:', this.backgrounds);
        } catch (error) {
            console.error('加载背景列表失败:', error);

            // 如果远程加载失败，尝试使用本地备用背景
            if (typeof isLocalDevelopment !== 'function' || !isLocalDevelopment()) {
                try {
                    console.log('尝试使用本地备用背景...');
                    this.backgrounds = [
                        { file: 'bg1.jpg', name: '默认背景1' },
                        { file: 'bg2.jpg', name: '默认背景2' },
                        { file: 'bg3.jpg', name: '默认背景3' }
                    ];
                    console.log('使用本地备用背景:', this.backgrounds);
                } catch (localError) {
                    console.error('加载本地备用背景也失败', localError);
                    this.backgrounds = [];
                }
            } else {
                this.backgrounds = [];
            }
        }
    }

    async setRandomBackground() {
        console.log('setRandomBackground 被调用，背景列表长度:', this.backgrounds.length);
        if (this.backgrounds.length === 0) {
            console.warn('背景列表为空，无法设置随机背景');
            return;
        }

        try {
            const randomBg = this.backgrounds[Math.floor(Math.random() * this.backgrounds.length)];
            console.log('选择的随机背景:', randomBg.file);

            // 直接使用WebP格式
            const bgFile = randomBg.webp || randomBg.file;
            console.log('使用WebP格式:', bgFile);

            // 构建背景URL，使用当前域名
            const bgUrl = `${window.location.origin}/resource/backgrounds/${bgFile}`;

            // 检查是否已经缓存
            if (window.backgroundCacheManager) {
                const isCached = await window.backgroundCacheManager.isBackgroundCached(bgFile);
                if (isCached) {
                    console.log('使用缓存的背景:', bgFile);
                } else {
                    console.log('背景未缓存，从网络加载:', bgFile);
                }
            }

            console.log('背景URL:', bgUrl);

            // 使用与页面一致的背景设置方式
            document.body.style.setProperty('--bg-image', `url(${bgUrl})`);
            document.body.classList.remove('bg-fade');
            void document.body.offsetWidth; // 强制重绘
            document.body.classList.add('bg-fade');
            console.log('背景CSS已设置');

            this.currentBackground = randomBg;

            // 保存当前背景（保存原始文件名，不包含格式）
            localStorage.setItem('currentBg', randomBg.file);
            console.log('背景已保存到localStorage');

            // 应用亮色背景模式（背景是亮的，文字是暗的）
            document.body.classList.add('light-bg');
            document.body.classList.remove('dark-bg');

            // 确保标题是亮色的（将不要太黑）顺便添加发光效果
            const headerTitle = document.querySelector('header h1');
            if (headerTitle) {
                headerTitle.classList.add('light-bg-glow');
                headerTitle.classList.remove('dark-bg');
            }

            console.log('亮色背景模式应用完成，标题设置为亮色', randomBg.name);

            console.log('背景设置成功:', bgFile);
        } catch (error) {
            console.error('设置背景失败:', error);
        }
    }

    // 检查浏览器是否支持WebP格式
    async checkWebPSupport() {
        // 检查是否已经缓存过检测结果
        if (typeof this.supportsWebP !== 'undefined') {
            return this.supportsWebP;
        }

        return new Promise((resolve) => {
            const webP = new Image();
            webP.onload = webP.onerror = function() {
                this.supportsWebP = (webP.height > 0 && webP.width > 0);
                resolve(this.supportsWebP);
            };
            webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';
        });
    }

    async setVideoBackground(videoTitle) {
        if (!videoTitle || !this.backgrounds.length) return;

        // 为每个视频生成一个严格的背景索引
        let hash = 0;
        for (let i = 0; i < videoTitle.length; i++) {
            hash = ((hash << 5) - hash) + videoTitle.charCodeAt(i);
            hash = hash & hash; // 转换为32位整数
        }

        const bgIndex = Math.abs(hash) % this.backgrounds.length;
        const selectedBg = this.backgrounds[bgIndex];

        try {
            // 优先使用WebP格式，如果浏览器不支持则回退到PNG
            const supportsWebP = await this.checkWebPSupport();
            const bgFile = supportsWebP && selectedBg.webp ? selectedBg.webp : selectedBg.file;
            console.log(`使用${supportsWebP ? 'WebP' : 'PNG'}格式:`, bgFile);

            // 构建背景URL，使用当前域名
            const bgUrl = `${window.location.origin}/resource/backgrounds/${bgFile}`;

            // 检查是否已经缓存
            if (window.backgroundCacheManager) {
                const isCached = await window.backgroundCacheManager.isBackgroundCached(bgFile);
                if (isCached) {
                    console.log('使用缓存的视频背景:', bgFile);
                } else {
                    console.log('视频背景未缓存，从网络加载:', bgFile);
                }
            }

            // 使用与页面一致的背景设置方式
            document.body.style.setProperty('--bg-image', `url(${bgUrl})`);
            document.body.classList.remove('bg-fade');
            void document.body.offsetWidth; // 强制重绘
            document.body.classList.add('bg-fade');

            this.currentVideoBg = selectedBg;

            // 保存当前背景（保存原始文件名，不包含格式）
            localStorage.setItem('currentBg', selectedBg.file);

            // 应用亮色背景模式（背景是亮的，文字是暗的）
            document.body.classList.add('light-bg');
            document.body.classList.remove('dark-bg');

            // 确保标题是亮色的（将不要太黑）顺便添加发光效果
            const headerTitle = document.querySelector('header h1');
            if (headerTitle) {
                headerTitle.classList.add('light-bg-glow');
                headerTitle.classList.remove('dark-bg');
            }

            console.log(`为视频"${videoTitle}" 应用亮色背景模式完成，标题设置为亮色`, selectedBg.name);

            console.log(`为视频"${videoTitle}" 设置背景:`, bgFile);
        } catch (error) {
            console.error('设置视频背景失败:', error);
        }
    }

    resetToDefaultBackground() {
        if (this.currentBackground) {
            this.setRandomBackground();
            this.currentVideoBg = null;
        }
    }
}

// 鼠标跟随背景功能
function initMouseFollowBackground() {
    let isMouseMoveEnabled = true;

    // 节流版本的鼠标移动处理函数
    const throttledMouseMove = throttle((e) => {
        if (!isMouseMoveEnabled) return;

        // 计算鼠标相对于屏幕中心的位置（-1 到 1）
        const mouseX = (e.clientX - window.innerWidth / 2) / (window.innerWidth / 2);
        const mouseY = (e.clientY - window.innerHeight / 2) / (window.innerHeight / 2);

        // 设置移动范围
        const moveRange = 15; // 移动范围（像素）

        // 反向移动
        const translateX = -mouseX * moveRange;
        const translateY = -mouseY * moveRange;

        // 使用requestAnimationFrame优化性能
        requestAnimationFrame(() => {
            document.body.style.setProperty('--bg-transform',
                `translate(${translateX}px, ${translateY}px)`);
        });
    }, 16); // 约60fps

    document.addEventListener('mousemove', throttledMouseMove, { passive: true });

    // 页面后台时禁用鼠标跟随
    document.addEventListener('visibilitychange', () => {
        isMouseMoveEnabled = !document.hidden;
        if (document.hidden) {
            // 页面隐藏时重置背景位置
            document.body.style.setProperty('--bg-transform', 'translate(0px, 0px)');
        }
    });
}

// 全局背景管理器
// 注意：backgroundManager变量在initManager.js中声明，这里不再声明