<?php
// /lib/DataSources.php — ОПТИМИЗИРОВАННАЯ ВЕРСИЯ
require_once 'RealDataSources.php';

class DataSources {
    // ... (ranges и weights остаются без изменений) ...

    public static function getValue(string $factor_name, array $config = []): float {
        $cacheDir = sys_get_temp_dir() . '/avatiah_cache/';
        if (!is_dir($cacheDir)) mkdir($cacheDir, 0755, true);
        $cacheFile = $cacheDir . $factor_name . '.json';
        
        // РАЗНАЯ ЧАСТОТА ОБНОВЛЕНИЯ ДЛЯ РАЗНЫХ ФАКТОРОВ
        $cacheTimes = [
            'pizza' => 1800,    // 30 минут
            'media' => 1800,    // 30 минут  
            'social' => 1800,   // 30 минут
            'cyber' => 1800,    // 30 минут
            'oil' => 3600,      // 1 час
            'gold' => 3600,     // 1 час
            'vip' => 3600,      // 1 час
            'navy' => 7200,     // 2 часа
            'gov' => 14400,     // 4 часа
            'energy' => 14400,  // 4 часа
            'mfa' => 21600,     // 6 часов
            'pm' => 21600,      // 6 часов
            'contractors' => 28800, // 8 часов
            'reserves' => 43200,    // 12 часов
            'evacuation' => 86400,  // 24 часа
            'darknet' => 86400,     // 24 часа
            'medical' => 172800,    // 48 часов
            'satellite' => 172800,  // 48 часов
        ];
        
        $cacheTime = $cacheTimes[$factor_name] ?? 3600; // по умолчанию 1 час

        // Проверяем кэш
        if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {
            $cached = json_decode(file_get_contents($cacheFile), true);
            if (isset($cached['value'])) {
                return $cached['value'];
            }
        }

        // Получаем актуальные данные (код из предыдущей версии)
        $value = self::fetchRealValue($factor_name);
        
        file_put_contents($cacheFile, json_encode([
            'value' => $value, 
            'timestamp' => time(),
            'cache_until' => time() + $cacheTime
        ]));
        
        return $value;
    }
    
    private static function fetchRealValue(string $factor_name): float {
        // ... код из предыдущей версии getValue() ...
        switch ($factor_name) {
            case 'pizza':
                $data = RealDataSources::getPizzaIndex();
                return $data['value'];
            // ... и так для всех факторов ...
        }
    }

    /**
     * Умное обновление - только устаревших данных
     */
    public static function getSmartData(): array {
        $factors = array_keys(self::$weights);
        $result = [];
        
        foreach ($factors as $factor) {
            $result[$factor] = self::getValue($factor);
        }
        
        return $result;
    }
    
    /**
     * Принудительное обновление всех данных
     */
    public static function forceRefreshAll(): array {
        $cacheDir = sys_get_temp_dir() . '/avatiah_cache/';
        if (is_dir($cacheDir)) {
            array_map('unlink', glob($cacheDir . "*.json"));
        }
        return self::getSmartData();
    }
}
?>