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

    async init() {
        try {
            // 获取背景列表
            await this.loadBackgrounds();
            console.log('背景管理器初始化完成，背景列表长度:', this.backgrounds.length);

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

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

            // 使用当前域名下的资源
            const url = `${window.location.origin}/videolist/bg.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);

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

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

            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('背景设置成功:', randomBg.file);
        } catch (error) {
            console.error('设置背景失败:', error);
        }
    }

    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 {
            // 构建背景URL，使用当前域名
            const bgUrl = `${window.location.origin}/background/${selectedBg.file}`;

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

            // 使用与页面一致的背景设置方式
            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}" 设置背景:`, selectedBg.file);
        } 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中声明，这里不再声明
