// js/dashboard.js - ИСПРАВЛЕННАЯ ВЕРСИЯ
document.addEventListener('DOMContentLoaded', function() {
    async function loadData() {
        try {
            const response = await fetch('api/latest.php');
            if (!response.ok) throw new Error('API error');
            const data = await response.json();
            
            // Проверяем наличие обязательных данных
            if (typeof data.security_index === 'undefined') {
                throw new Error('Invalid data format');
            }
            
            return data;
        } catch (error) {
            console.error('Load error:', error);
            showErrorMessage('Ошибка загрузки данных');
            return null;
        }
    }

    function showErrorMessage(message) {
        // Можно добавить уведомление для пользователя
        console.warn('Dashboard error:', message);
    }

    function safeUpdateElement(id, value, suffix = '') {
        const element = document.getElementById(id);
        if (element && value !== null && value !== undefined) {
            element.innerHTML = value + suffix;
        }
    }

    function formatNumber(value, decimals = 1) {
        if (value === null || value === undefined) return '--';
        return parseFloat(value).toFixed(decimals);
    }

    async function updateDashboard() {
        const data = await loadData();
        if (!data) return;

        // Основные метрики с безопасной обработкой
        safeUpdateElement('security-index-value', 
            `${formatNumber(data.security_index)} <span class="metric-max">/ 10</span>`);
        
        // Статус AAL с проверкой
        const aalStatus = document.getElementById('aal-status');
        if (aalStatus) {
            aalStatus.textContent = getAalStatusText(data.aal_level);
        }

        // Временные метрики с проверкой на null
        safeUpdateElement('time-to-aa3-value', 
            data.time_to_aa3 ? `${formatNumber(data.time_to_aa3)} <span class="metric-unit">дня</span>` : '-- <span class="metric-unit">дня</span>');
        
        safeUpdateElement('signal-detection-value', 
            data.signal_detection_time ? `${data.signal_detection_time} <span class="metric-unit">часов</span>` : '-- <span class="metric-unit">часов</span>');
        
        safeUpdateElement('detection-to-action-value', 
            data.detection_to_action_time ? `${data.detection_to_action_time} <span class="metric-unit">часов</span>` : '-- <span class="metric-unit">часов</span>');

        // Детальный индекс
        safeUpdateElement('detailed-index-value', `${formatNumber(data.security_index)} / 10`);
        
        const detailedStatus = document.getElementById('detailed-index-status');
        if (detailedStatus) {
            detailedStatus.textContent = getDetailedStatusText(data.aal_level);
            detailedStatus.className = `index-status-${getStatusClass(data.aal_level)}`;
        }

        // Время обновления
        const timeStr = formatTimestamp(data.timestamp);
        safeUpdateElement('header-time', timeStr);
        safeUpdateElement('detailed-index-time', timeStr);
        safeUpdateElement('last-update-time', new Date().toLocaleTimeString('ru-RU'));

        // Таблица компонентов
        updateComponentsTable(data.components || {});
        
        // Дополнительные метрики
        updateAdditionalMetrics(data);
        
        // Обновляем время в заголовке
        updateCurrentTime();
    }

    function getAalStatusText(aalLevel) {
        const statusMap = {
            5: 'АБ-1 (Норма)',
            4: 'АБ-2 (Повышение нужды)',
            3: 'АБ-3 (Усиление наблюдения)',
            2: 'АБ-4 (Критическая готовность)',
            1: 'АБ-5 (Чрезвычайная угроза)'
        };
        return statusMap[aalLevel] || 'Неизвестный статус';
    }

    function getDetailedStatusText(aalLevel) {
        const statusMap = {
            5: 'Нормальная ситуация',
            4: 'А. ПОВЫШЕННАЯ УГРОЗА (ААL-4)',
            3: 'КРИТИЧЕСКАЯ УГРОЗА (ААL-3)',
            2: 'ВЫСОКАЯ УГРОЗА (ААL-2)',
            1: 'ЧРЕЗВЫЧАЙНАЯ УГРОЗА (ААL-1)'
        };
        return statusMap[aalLevel] || 'НЕИЗВЕСТНЫЙ СТАТУС';
    }

    function getStatusClass(aalLevel) {
        if (aalLevel >= 4) return 'low';
        if (aalLevel === 3) return 'medium';
        if (aalLevel === 2) return 'high';
        return 'critical';
    }

    function formatTimestamp(timestamp) {
        try {
            return new Date(timestamp).toLocaleString('ru-RU', {
                year: 'numeric',
                month: 'long',
                day: 'numeric',
                hour: '2-digit',
                minute: '2-digit',
                second: '2-digit'
            }) + ' (Израиль)';
        } catch (e) {
            return 'Некорректная дата';
        }
    }

    function updateComponentsTable(components) {
        const tbody = document.getElementById('components-table-body');
        if (!tbody) return;

        tbody.innerHTML = '';
        
        const componentConfig = [
            { key: 'pizza', name: 'Индекс пиццы' },
            { key: 'oil', name: 'Нефть Brent' },
            { key: 'media', name: 'Медиа-упоминания' },
            { key: 'navy', name: 'Группы ВМС США' },
            { key: 'vip', name: 'Дипломатические рейсы' },
            { key: 'gov', name: 'Правительственные события' },
            { key: 'gold', name: 'Золото' },
            { key: 'cyber', name: 'Киберугрозы' },
            { key: 'energy', name: 'Энергетика' },
            { key: 'social', name: 'Соцсети' }
        ];

        componentConfig.forEach(({ key, name }) => {
            const component = components[key] || {};
            const row = document.createElement('tr');
            row.innerHTML = `
                <td>${name}</td>
                <td>${formatNumber(component.raw, 1)}</td>
                <td>${formatNumber(component.score, 1)}</td>
            `;
            tbody.appendChild(row);
        });
    }

    function updateAdditionalMetrics(data) {
        // Вероятность эскалации (примерная логика)
        const riskProbability = calculateRiskProbability(data);
        safeUpdateElement('risk-probability', `${riskProbability}%`);
        
        // Факторы риска
        updateRiskFactors(data);
        
        // Временные метрики системы
        updateSystemMetrics();
    }

    function calculateRiskProbability(data) {
        // Простая логика расчета на основе индекса безопасности
        if (data.security_index >= 7) return 85;
        if (data.security_index >= 5) return 65;
        if (data.security_index >= 3.5) return 45;
        if (data.security_index >= 2) return 25;
        return 15;
    }

    function updateRiskFactors(data) {
        const riskList = document.getElementById('risk-factors-list');
        if (!riskList) return;

        const factors = [];
        
        if (data.security_index >= 7) {
            factors.push('Высокий уровень медиа-активности');
            factors.push('Увеличение киберугроз');
            factors.push('Повышенная дипломатическая активность');
        } else if (data.security_index >= 5) {
            factors.push('Умеренная медиа-активность');
            factors.push('Стабильно высокие цены на нефть');
        } else {
            factors.push('Низкий уровень угроз');
            factors.push('Стабильная ситуация');
        }

        riskList.innerHTML = factors.map(factor => 
            `<li>${factor}</li>`
        ).join('');
    }

    function updateSystemMetrics() {
        // Примерные системные метрики
        safeUpdateElement('response-time-value', '2.3с');
        safeUpdateElement('data-processing-value', '1.8с');
        safeUpdateElement('efficiency-value', '94%');
    }

    function updateCurrentTime() {
        const now = new Date().toLocaleString('ru-RU', {
            hour: '2-digit',
            minute: '2-digit',
            second: '2-digit'
        });
        // Можно добавить отображение текущего времени где-то в интерфейсе
    }

    // Инициализация
    updateDashboard();
    
    // Автообновление каждые 30 секунд
    setInterval(updateDashboard, 30000);
    
    // Инициализация графиков если есть контейнер
    if (typeof ComponentCharts !== 'undefined' && document.getElementById('analytics-container')) {
        ComponentCharts.renderComponentHistory();
        ComponentCharts.renderIndexHistory();
    }
});