// js/app.js - ИСПРАВЛЕННЫЕ ПУТИ ДЛЯ ПОДДИРЕКТОРИИ
class SecurityDashboard {
    constructor() {
        this.currentData = null;
        this.historyChart = null;
        this.basePath = ''; // Для поддиректории /1/
        this.init();
    }

    async init() {
        await this.loadLatestData();
        await this.loadHistoryData(7);
        this.setupEventListeners();
        this.startAutoRefresh();
        this.updateTime();
    }

    async loadLatestData() {
        try {
            const res = await fetch('/api/latest.php'); // ОТНОСИТЕЛЬНЫЙ ПУТЬ
            const data = await res.json();
            
            if (data.error) throw new Error(data.error);
            
            this.currentData = data;
            this.updateInterface(data);
            this.updateComponentsGrid(data.components);
            
        } catch (error) {
            console.error('Ошибка загрузки данных:', error);
            this.showError('Не удалось загрузить данные');
        }
    }

    async loadHistoryData(days = 7) {
        try {
            const res = await fetch(`api/history.php?days=${days}`); // ОТНОСИТЕЛЬНЫЙ ПУТЬ
            const data = await res.json();
            
            if (data.success) {
                this.renderHistoryChart(data.data, days);
            }
        } catch (error) {
            console.error('Ошибка загрузки истории:', error);
        }
    }

    updateInterface(data) {
        const indexValue = data.security_index.toFixed(1);
        
        // Обновление основного индекса
        document.getElementById('main-index-value').textContent = `${indexValue} / 10`;
        document.getElementById('current-index-value').textContent = indexValue;

        // Статус AAL
        let statusText, aalLevel;
        if (data.security_index < 2) { 
            statusText = "НОРМАЛЬНАЯ СИТУАЦИЯ (AAL 5)"; 
            aalLevel = 5; 
        } else if (data.security_index < 3.5) { 
            statusText = "ПОВЫШЕННАЯ УГРОЗА (AAL 4)"; 
            aalLevel = 4; 
        } else if (data.security_index < 5) { 
            statusText = "ВЫСОКАЯ УГРОЗА (AAL 3)"; 
            aalLevel = 3; 
        } else if (data.security_index < 7) { 
            statusText = "КРИТИЧЕСКАЯ УГРОЗА (AAL 2)"; 
            aalLevel = 2; 
        } else { 
            statusText = "МАКСИМАЛЬНАЯ УГРОЗА (AAL 1)"; 
            aalLevel = 1; 
        }
        
        document.getElementById('index-status').textContent = `⚠️ ${statusText}`;

        // Позиция маркера на шкале
        const marker = document.getElementById('current-marker');
        if (marker) {
            const scaleWidth = document.querySelector('.index-scale').offsetWidth;
            marker.style.left = `${(data.security_index / 10) * scaleWidth}px`;
        }

        // Вероятность эскалации
        this.updateEscalationProbability(data.security_index);

        // Качество данных
        const qualityEl = document.getElementById('data-quality-indicator');
        if (qualityEl) {
            qualityEl.textContent = data.is_manual ? 'Ручная корректировка' : 'Автоматические';
            qualityEl.className = `status-value ${data.is_manual ? 'quality-medium' : 'quality-high'}`;
        }

        // Время обновления
        const timeEl = document.getElementById('last-update-time');
        if (timeEl) {
            timeEl.textContent = new Date(data.timestamp).toLocaleString('ru-RU');
        }
    }

    updateComponentsGrid(components) {
        const grid = document.getElementById('components-grid');
        const componentsMap = {
            pizza: { name: '🍕 Индекс пиццы', format: (v) => `${v.toFixed(1)}x` },
            oil: { name: '🛢️ Нефть Brent', format: (v) => `${v.toFixed(1)}` },
            media: { name: '📰 Медиа-активность', format: (v) => `${Math.round(v)}/час` },
            navy: { name: '🚢 ВМС США', format: (v) => `${Math.round(v)} групп` },
            vip: { name: '✈️ Дипломатия', format: (v) => `${Math.round(v)} рейсов` },
            gov: { name: '🏛️ Правительство', format: (v) => `${Math.round(v)} событий` },
            gold: { name: '💎 Золото', format: (v) => `${v.toFixed(1)}` },
            cyber: { name: '🔒 Киберугрозы', format: (v) => `Ур. ${Math.round(v)}/5` },
            energy: { name: '⚡ Энергетика', format: (v) => `${v.toFixed(1)}%` },
            social: { name: '📱 Соцсети', format: (v) => `Ур. ${v.toFixed(1)}/5` }
        };

        grid.innerHTML = Object.entries(componentsMap).map(([key, config]) => {
            const component = components[key];
            const score = component.score;
            const isCritical = score > 7;
            
            return `
                <div class="component-card ${isCritical ? 'critical' : ''}">
                    <div class="component-header">
                        <strong>${config.name}</strong>
                        <span class="component-value">${config.format(component.raw)}</span>
                    </div>
                    <div class="component-trend">
                        Индекс: ${score.toFixed(1)}/10
                    </div>
                </div>
            `;
        }).join('');
    }

    updateEscalationProbability(index) {
        const prob = Math.min(95, Math.round(index * 15 + (index > 3 ? 10 : 0)));
        const probEl = document.getElementById('escalation-probability');
        if (probEl) {
            probEl.textContent = prob + '%';
            
            // Обновление класса риска
            probEl.className = 'status-value ' + (
                prob < 40 ? 'risk-low' :
                prob < 60 ? 'risk-medium' :
                prob < 80 ? 'risk-high' :
                'risk-critical'
            );
        }
    }

    renderHistoryChart(historyData, days) {
        const ctx = document.getElementById('history-chart').getContext('2d');
        
        if (this.historyChart) {
            this.historyChart.destroy();
        }

        // Если нет данных, показываем заглушку
        if (!historyData || historyData.length === 0) {
            ctx.font = '16px Arial';
            ctx.fillStyle = '#999';
            ctx.textAlign = 'center';
            ctx.fillText('Нет исторических данных', ctx.canvas.width / 2, ctx.canvas.height / 2);
            return;
        }

        const labels = historyData.map(item => 
            new Date(item.timestamp).toLocaleDateString('ru-RU', {
                month: 'short',
                day: 'numeric',
                hour: '2-digit'
            })
        );

        const data = historyData.map(item => item.security_index);

        this.historyChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: labels,
                datasets: [{
                    label: 'Индекс безопасности',
                    data: data,
                    borderColor: '#3498db',
                    backgroundColor: 'rgba(52, 152, 219, 0.1)',
                    borderWidth: 2,
                    fill: true,
                    tension: 0.4
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        display: false
                    }
                },
                scales: {
                    y: {
                        beginAtZero: true,
                        max: 10,
                        grid: {
                            color: 'rgba(0,0,0,0.1)'
                        }
                    },
                    x: {
                        grid: {
                            display: false
                        }
                    }
                }
            }
        });
    }

    setupEventListeners() {
        // Кнопки выбора периода для графика
        document.querySelectorAll('.time-btn').forEach(btn => {
            btn.addEventListener('click', (e) => {
                document.querySelectorAll('.time-btn').forEach(b => b.classList.remove('active'));
                e.target.classList.add('active');
                const days = parseInt(e.target.dataset.days);
                this.loadHistoryData(days);
            });
        });
    }

    startAutoRefresh() {
        setInterval(() => {
            this.loadLatestData();
        }, 300000); // 5 минут
    }

    updateTime() {
        function update() {
            const now = new Date();
            const options = { 
                year: 'numeric', 
                month: 'long', 
                day: 'numeric', 
                hour: '2-digit', 
                minute: '2-digit',
                timeZone: 'Asia/Jerusalem' 
            };
            const timeElement = document.querySelector('.index-label-big');
            if (timeElement) {
                timeElement.innerHTML = 
                    `<span class="live-indicator"><span class="pulse"></span>LIVE</span> 
                     ${now.toLocaleDateString('ru-RU', options)} (Израиль)`;
            }
        }
        
        update();
        setInterval(update, 60000);
    }

    showError(message) {
        const statusEl = document.getElementById('index-status');
        if (statusEl) {
            statusEl.textContent = `❌ ${message}`;
            statusEl.style.color = '#e74c3c';
        }
        
        // Показываем ошибку во всех компонентах
        document.querySelectorAll('.component-value').forEach(el => {
            el.textContent = '--';
        });
        
        document.querySelectorAll('.component-trend').forEach(el => {
            el.textContent = 'Индекс: --/10';
        });
    }
}

// Глобальная функция для ручного обновления
function loadLatestData() {
    if (window.dashboard) {
        window.dashboard.loadLatestData();
    }
}

// Инициализация при загрузке страницы
document.addEventListener('DOMContentLoaded', () => {
    window.dashboard = new SecurityDashboard();
});