<?php
/**
 * 主题初始化配置文件
 * 包含服务器资源限制、内存管理等初始化设置
 */

// 防止直接访问
if (!defined('ABSPATH')) {
    exit;
}

/**
 * 设置合理的服务器资源限制
 * 在主题初始化时配置内存、执行时间和文件上传限制
 */
function nenghui_performance_init() {
    // 设置内存限制（根据服务器配置调整）
    if (!ini_get('memory_limit') || ini_get('memory_limit') < '256M') {
        ini_set('memory_limit', '256M');
    }
    
    // 设置执行时间限制
    if (!ini_get('max_execution_time') || ini_get('max_execution_time') < 300) {
        set_time_limit(300); // 5分钟
    }
    
    // 设置上传文件大小限制
    if (!ini_get('upload_max_filesize') || parse_size(ini_get('upload_max_filesize')) < parse_size('50M')) {
        ini_set('upload_max_filesize', '50M');
    }
    
    // 设置POST数据最大大小限制为52MB（需要比upload_max_filesize稍大以容纳表单数据）
    if (!ini_get('post_max_size') || parse_size(ini_get('post_max_size')) < parse_size('52M')) {
        ini_set('post_max_size', '52M');
    }
}

/**
 * 解析文件大小字符串为字节数
 * 将如"50M"、"1G"等格式转换为字节数
 * @param string $size 文件大小字符串
 * @return int 字节数
 */
function parse_size($size) {
    $unit = preg_replace('/[^bkmgtpezy]/i', '', $size);
    $size = preg_replace('/[^0-9\.]/', '', $size);
    if ($unit) {
        return round($size * pow(1024, stripos('bkmgtpezy', $unit[0])));
    }
    return round($size);
}

/**
 * 启用图片压缩和缩略图生成
 * 设置JPEG压缩质量和WebP支持
 */
function nenghui_enable_image_compression() {
    // 设置JPEG压缩质量
    add_filter('jpeg_quality', function() { return 85; });
    add_filter('wp_editor_set_quality', function() { return 85; });
    
    // 启用WebP支持（如果服务器支持）
    if (function_exists('imagewebp')) {
        add_filter('wp_generate_attachment_metadata', 'nenghui_generate_webp_images', 10, 2);
    }
}

/**
 * 生成WebP格式图片
 * 为上传的JPEG和PNG图片自动生成WebP版本
 * @param array $metadata 图片元数据
 * @param int $attachment_id 附件ID
 * @return array 处理后的元数据
 */
function nenghui_generate_webp_images($metadata, $attachment_id) {
    // 确保 $metadata 是数组
    if (!is_array($metadata)) {
        return $metadata;
    }
    
    $file = get_attached_file($attachment_id);
    if (!$file) {
        return $metadata;
    }
    
    $info = pathinfo($file);
    
    if (isset($info['extension']) && in_array(strtolower($info['extension']), array('jpg', 'jpeg', 'png'))) {
        $webp_file = $info['dirname'] . '/' . $info['filename'] . '.webp';
        
        switch (strtolower($info['extension'])) {
            case 'jpg':
            case 'jpeg':
                $image = imagecreatefromjpeg($file);
                break;
            case 'png':
                $image = imagecreatefrompng($file);
                break;
        }
        
        if (isset($image)) {
            imagewebp($image, $webp_file, 85);
            imagedestroy($image);
        }
    }
    
    return $metadata;
}

/**
 * 监控内存使用情况
 * 在调试模式下记录内存使用情况
 */
function nenghui_memory_monitor() {
    if (WP_DEBUG) {
        $memory_usage = memory_get_usage(true);
        $memory_peak = memory_get_peak_usage(true);
        $memory_limit = ini_get('memory_limit');
        
        error_log(sprintf(
            'Nenghui Theme Memory Usage: Current: %s, Peak: %s, Limit: %s',
            size_format($memory_usage),
            size_format($memory_peak),
            $memory_limit
        ));
    }
}
add_action('wp_footer', 'nenghui_memory_monitor');

/**
 * 清理临时文件
 * 定期清理上传目录中的临时文件
 */
function nenghui_cleanup_temp_files() {
    $upload_dir = wp_upload_dir();
    
    // 确保 $upload_dir 是数组且包含 basedir
    if (!is_array($upload_dir) || !isset($upload_dir['basedir'])) {
        return;
    }
    
    $temp_dir = $upload_dir['basedir'] . '/temp/';
    
    if (is_dir($temp_dir)) {
        $files = glob($temp_dir . '*');
        $now = time();
        
        if (is_array($files) && !empty($files)) {
            foreach ($files as $file) {
                if (is_file($file) && ($now - filemtime($file)) > 3600) { // 删除1小时前的临时文件
                    unlink($file);
                }
            }
        }
    }
}

// 每小时清理一次临时文件
if (!wp_next_scheduled('nenghui_cleanup_temp_files')) {
    wp_schedule_event(time(), 'hourly', 'nenghui_cleanup_temp_files');
}
add_action('nenghui_cleanup_temp_files', 'nenghui_cleanup_temp_files');

// 初始化性能优化
add_action('init', 'nenghui_performance_init');
add_action('init', 'nenghui_enable_image_compression');

?>