/**
 * 页面加载优化器
 * 提供AJAX缓存、延迟加载、加载状态管理等功能
 */

(function() {
    'use strict';
    
    // AJAX请求缓存
    var ajaxCache = {};
    var CACHE_DURATION = 30000; // 缓存30秒
    
    // 显示加载状态
    window.showPageLoading = function() {
        var loader = document.getElementById('pageLoader');
        if (loader) {
            loader.style.display = 'flex';
            // 强制重绘
            loader.offsetHeight;
            loader.style.opacity = '1';
        }
    };
    
    // 隐藏加载状态
    window.hidePageLoading = function() {
        var loader = document.getElementById('pageLoader');
        if (loader) {
            loader.style.opacity = '0';
            setTimeout(function() {
                loader.style.display = 'none';
            }, 300);
        }
    };
    
    // 优化的AJAX加载函数
    window.loadPageOptimized = function(url, options) {
        options = options || {};
        var cacheKey = url + JSON.stringify(options.data || {});
        var cached = ajaxCache[cacheKey];
        
        // 检查缓存
        if (cached && (Date.now() - cached.time < CACHE_DURATION) && !options.noCache) {
            if (options.success) {
                options.success(cached.data);
            }
            return;
        }
        
        // 显示加载状态
        if (options.showLoading !== false) {
            showPageLoading();
        }
        
        // 设置超时
        var timeout = options.timeout || 30000;
        
        $.ajax({
            url: url,
            type: options.type || 'GET',
            data: options.data,
            dataType: options.dataType || 'html',
            timeout: timeout,
            success: function(data) {
                // 缓存结果
                if (!options.noCache) {
                    ajaxCache[cacheKey] = {
                        data: data,
                        time: Date.now()
                    };
                }
                
                hidePageLoading();
                
                if (options.success) {
                    options.success(data);
                }
            },
            error: function(xhr, status, error) {
                hidePageLoading();
                
                if (options.error) {
                    options.error(xhr, status, error);
                } else {
                    console.error('页面加载失败:', url, status, error);
                }
            }
        });
    };
    
    // 图片懒加载
    window.lazyLoadImages = function(container) {
        var images = (container || document).querySelectorAll('img[data-src]');
        
        if ('IntersectionObserver' in window) {
            var imageObserver = new IntersectionObserver(function(entries) {
                entries.forEach(function(entry) {
                    if (entry.isIntersecting) {
                        var img = entry.target;
                        img.src = img.dataset.src;
                        img.removeAttribute('data-src');
                        imageObserver.unobserve(img);
                    }
                });
            });
            
            images.forEach(function(img) {
                imageObserver.observe(img);
            });
        } else {
            // 降级处理
            images.forEach(function(img) {
                img.src = img.dataset.src;
                img.removeAttribute('data-src');
            });
        }
    };
    
    // 预加载页面
    window.preloadPage = function(url) {
        var link = document.createElement('link');
        link.rel = 'prefetch';
        link.href = url;
        document.head.appendChild(link);
    };
    
    // 清理过期缓存
    setInterval(function() {
        var now = Date.now();
        for (var key in ajaxCache) {
            if (now - ajaxCache[key].time > CACHE_DURATION) {
                delete ajaxCache[key];
            }
        }
    }, 60000); // 每分钟清理一次
    
    // DOM加载完成后初始化
    document.addEventListener('DOMContentLoaded', function() {
        // 初始化图片懒加载
        lazyLoadImages();
        
        // 预加载常用页面
        var commonPages = ['sy.php', 'sql.php'];
        commonPages.forEach(function(page) {
            preloadPage(page);
        });
    });
    
})();
