<?php
/* hezbollah.php – AAL Хезболла | Avatiah Security Index
   Полная, адаптивная, самообновляемая страница
   Обновление: каждые 30 мин через JS
   Кэш: hezbollah_cache.json
   API: fetch_hezbollah.php
   Дата: 04.11.2025 10:00 UTC
   Актуальные данные: Слабость после войны (Nasrallah убит, 90% инфраструктуры уничтожено, 10k+ потерь); перевооружение (613 израильских ударов с перемирия, частичное восстановление цепочки поставок из Ирана); 4 убитых в ударе 03.11 (Al Jazeera); давление Египта на разоружение (Times of Israel); AAL 2.5 (средняя угроза, фокус на восстановлении).
*/

date_default_timezone_set('UTC');
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-cache, must-revalidate');
$update_interval = 30;

// --- 1. Чтение кэша ---
$cache_file = __DIR__ . '/hezbollah_cache.json';
$data = [
    'last_update' => '04.11.2025 10:00 UTC',
    'aal' => 2.5,
    'aal_text' => 'Средняя угроза',
    'aal_color' => '#f59e0b',
    'analysis' => [
        'threat_level' => 3,
        'leadership_status' => 'Ослаблено (Nasrallah убит 27.09.2024, 30+ командиров ликвидированы, 90% командования уничтожено; Qassem: 5k+ мертвых, август 2025)',
        'casualties' => '10,000+ убитых (INSS, октябрь 2025)',
        'infrastructure' => '90% разрушено в южном Ливане; 613 израильских ударов с перемирия (Alma Center, 26.10.2025); восстановление с иранской помощью (Haaretz, 04.11.2025)',
        'activity' => 'Низкая (локальные инциденты, 20 атак IDF в октябре для enforcement ceasefire; фокус на реабилитации, Terrorism-Info, 23.10.2025)',
        'threat' => 'Средняя (нет инвазий, но перевооружение; давление Египта на разоружение, Times of Israel, 03.11.2025; US envoy: Lebanon failed state, Mario Nawfal, 03.11.2025)',
        'summary' => 'Хезболла ослаблена после войны (90% инфраструктуры уничтожено, 10k+ потерь, лидерство ликвидировано). Перевооружение (частично восстановлена цепочка поставок из Ирана, Wall Street Journal, 31.10.2025). 613 ударов IDF с перемирия (Alma Center, 26.10.2025); 4 убитых в ударе 03.11 (Al Jazeera). Давление на разоружение (Египет, US, Reuters, 02.11.2025).',
        'israel_impact_summary' => 'Сниженная угроза (нет атак на Галилею, LongWarJournal, октябрь 2025); но восстановление может привести к локальным инцидентам (Soufan Center, 03.11.2025).',
        'economic_risk_summary' => 'Восстановление инфраструктуры: $1+ млрд иранской помощи (FPRI, октябрь 2025); влияние на Ливан (failed state, US envoy, 03.11.2025).',
        'forecast_summary' => 'стабильно средняя (AAL 2.5); +1 при полном перевооружении (UnHerd, 03.11.2025); давление на разоружение (Fox News, 02.11.2025).',
        'recent_events' => [
            '2025-11-03: Удар IDF убивает 4 в южном Ливане (Al Jazeera, 03.11.2025)',
            '2025-11-02: Египет давит на разоружение Хезболлы (Times of Israel, 03.11.2025)',
            '2025-11-01: US envoy: Lebanon failed state из-за Хезболлы (Mario Nawfal, 03.11.2025)',
            '2025-10-31: IDF предупреждает о перевооружении (Haaretz, 04.11.2025)',
            '2025-10-29: 20+ IDF атак в октябре для enforcement ceasefire (Terrorism-Info, 23.10.2025)',
            '2025-10-26: 613 ударов IDF с перемирия (Alma Center, 26.10.2025)',
            '2025-10-23: Убийство 3 боевиков Хезболлы (LongWarJournal, октябрь 2025)',
            '2025-10-20: 3 убитых в ударе IDF (FDD, 28.10.2025)',
            '2025-10-15: Хезболла собирает оружие из разрушенных сайтов (ISW, 03.11.2025)',
            '2025-10-13: Убийство 1 боевика Хезболлы (LongWarJournal, октябрь 2025)'
        ],
        'leadership_status' => [
            'Nasrallah' => 'Убит (27.09.2024)',
            'Commanders' => '30+ ликвидировано (INSS, октябрь 2025)',
            'Total' => '5k+ мертвых (Qassem, август 2025)'
        ],
        'infrastructure_status' => [
            'South Lebanon' => '90% разрушено (Washington Institute, октябрь 2025)',
            'Reconstruction' => 'Иранская помощь (UnHerd, 03.11.2025)',
            'Ceasefire' => '613 ударов IDF (Alma Center, 26.10.2025)'
        ]
    ],
    'reliability' => ['confirmed' => 9, 'probable' => 1, 'unknown' => 0],
    'chart_data' => [2.0, 2.2, 2.4, 2.5, 2.6, 2.7, 2.8, 2.8, 2.5, 2.5],
    'activities' => [
        [
            'type' => 'Удар IDF в южном Ливане',
            'date' => '03.11.2025',
            'location' => 'Meis al-Jabal',
            'participants' => 'IDF vs Хезболла',
            'topic' => 'Уничтожение инфраструктуры (Al Jazeera, 03.11.2025)',
            'urgency' => 'Высокая',
            'source' => 'Al Jazeera'
        ],
        [
            'type' => 'Восстановление цепочки поставок',
            'date' => '03.11.2025',
            'location' => 'Ливан',
            'participants' => 'Хезболла, Иран',
            'topic' => 'Перевооружение (Haaretz, 04.11.2025)',
            'urgency' => 'Средняя',
            'source' => 'Haaretz'
        ],
        [
            'type' => 'Давление на разоружение',
            'date' => '02.11.2025',
            'location' => 'Бейрут',
            'participants' => 'Египет, Ливан',
            'topic' => 'Египетский шпион шеф давит на разоружение (Times of Israel, 03.11.2025)',
            'urgency' => 'Средняя',
            'source' => 'Times of Israel'
        ],
        [
            'type' => 'Удар IDF, 4 убитых',
            'date' => '03.11.2025',
            'location' => 'Южный Ливан',
            'participants' => 'IDF vs Хезболла',
            'topic' => 'Нарушение перемирия (Al Jazeera, 03.11.2025)',
            'urgency' => 'Высокая',
            'source' => 'Al Jazeera'
        ]
    ],
    'impact' => [
        'casualties' => '10,000+ убитых (INSS, октябрь 2025)',
        'infrastructure' => '90% разрушено (Washington Institute, октябрь 2025)',
        'threat_level' => 'Средняя (перевооружение, Haaretz, 04.11.2025)',
        'sanctions' => 'Давление US/Египет (Fox News, 02.11.2025)'
    ]
];

if (file_exists($cache_file) && (time() - filemtime($cache_file)) < 1800) {
    $json = file_get_contents($cache_file);
    $tmp = json_decode($json, true);
    if (json_last_error() === JSON_ERROR_NONE) $data = array_merge($data, $tmp);
}

// --- 2. Расчёт AAL ---
$threat = $data['analysis']['threat_level'];
$casualties = (int)str_replace(',', '', $data['impact']['casualties']);
$aal = 1.0 + ($threat - 1) * 0.5 + ($casualties / 10000 * 0.5); // Масштабирование по потерям
$data['aal'] = round($aal, 1);
$data['aal_text'] = $aal >= 4 ? 'Критическая угроза' : ($aal >= 3 ? 'Высокая угроза' : ($aal >= 2 ? 'Средняя угроза' : 'Низкая угроза'));
$data['aal_color'] = $aal >= 4 ? '#dc2626' : ($aal >= 3 ? '#ef4444' : ($aal >= 2 ? '#f97316' : '#f59e0b'));

// --- 3. Синхронизация с total_index.json ---
$total_file = __DIR__ . '/total_index.json';
$total = ['factors'=>[], 'total_aal'=>1.0, 'last_update'=>date('d.m.Y H:i').' UTC', 'factor_count'=>0];
if (file_exists($total_file)) {
    $json = file_get_contents($total_file);
    $tmp = json_decode($json, true);
    if (json_last_error() === JSON_ERROR_NONE) $total = $tmp;
}
$total['factors']['hezbollah'] = [
    'aal' => $data['aal'],
    'last_update' => $data['last_update'],
    'casualties' => $data['impact']['casualties']
];
$sum = $count = 0;
foreach ($total['factors'] as $f) {
    if (isset($f['aal'])) { $sum += $f['aal']; $count++; }
}
$total['total_aal'] = $count > 0 ? round($sum / $count, 2) : 1.0;
$total['factor_count'] = $count;
$total['last_update'] = date('d.m.Y H:i').' UTC';
file_put_contents($total_file, json_encode($total, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

// --- 4. Экспорт в factors/hezbollah.json ---
$factors_dir = __DIR__ . '/factors';
if (!is_dir($factors_dir)) mkdir($factors_dir, 0755, true);
file_put_contents($factors_dir . '/hezbollah.json', json_encode([
    'aal' => $data['aal'],
    'last_update' => $data['last_update'],
    'analysis' => $data['analysis'],
    'activities' => $data['activities'],
    'impact' => $data['impact'],
    'reliability' => $data['reliability']
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

// --- 5. JS-данные ---
$js_data = json_encode($data, JSON_UNESCAPED_UNICODE);
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>AAL Хезболла | Avatiah Security Index</title>
    <meta name="description" content="Статус Хезболлы: 90% инфраструктуры уничтожено, 10k+ потерь (INSS, октябрь 2025). AAL <?= $data['aal'] ?>. <?= $data['last_update'] ?>">
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <style>
        :root {
            --bg: #0a0e1a;
            --card: #1a2332;
            --border: #2d3748;
            --text: #e2e8f0;
            --green: #10b981;
            --yellow: #f59e0b;
            --orange: #f97316;
            --red: #ef4444;
            --darkred: #dc2626;
            --font-sm: 0.875rem;
            --font-xs: 0.75rem;
        }
        * { box-sizing: border-box; margin: 0; padding: 0; }
        html { font-size: 100%; scroll-behavior: smooth; }
        body { background: var(--bg); color: var(--text); font-family: 'Inter', sans-serif; line-height: 1.6; padding: clamp(0.5rem,2vw,1rem); min-height: 100vh; display: flex; flex-direction: column; }
        .container { max-width: 1600px; margin: 0 auto; display: grid; gap: clamp(1rem,2.5vw,1.5rem); }
        @media (min-width: 768px) { .container { grid-template-columns: 1fr 340px; } }
        @media (min-width: 1200px) { .container { grid-template-columns: 1fr 360px; } }
        .section { background: var(--card); border-radius: 12px; padding: clamp(1rem,2.5vw,1.5rem); border: 1px solid var(--border); }
        .header { background: linear-gradient(135deg, #8b0000, #b22222); color: white; padding: clamp(1.5rem,4vw,2rem); border-radius: 16px; text-align: center; }
        .header h1 { font-size: clamp(1.8rem,5vw,2.8rem); margin-bottom: 0.5rem; }
        .header p { font-size: clamp(0.9rem,2vw,1rem); opacity: 0.9; }
        .back-link { display: inline-block; margin-top: 1rem; color: white; text-decoration: underline; font-size: clamp(0.8rem,1.8vw,0.9rem); }
        .aal-circle { width: clamp(100px,20vw,140px); height: clamp(100px,20vw,140px); border-radius: 50%; margin: 0 auto 1rem; display: flex; align-items: center; justify-content: center; font-size: clamp(2rem,6vw,3rem); font-weight: 700; }
        .aal-info { text-align: center; }
        .aal-info h2 { font-size: clamp(1.3rem,4vw,1.8rem); margin: 0.5rem 0; }
        .aal-stats { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.75rem; margin: 0.75rem 0; font-size: clamp(0.85rem,2vw,0.95rem); }
        .sources { text-align: center; font-size: var(--font-xs); color: #94a3b8; margin-top: 0.5rem; }
        .chart-container { position: relative; height: clamp(280px,45vw,340px); margin: 1.5rem 0; background: rgba(255,255,255,0.05); border-radius: 8px; padding: 1rem; }
        .aal-scale { display: grid; grid-template-columns: repeat(5,1fr); gap: 0.5rem; margin: 1rem 0; }
        .scale-item { padding: clamp(0.6rem,1.5vw,0.9rem); border-radius: 8px; text-align: center; font-size: var(--font-xs); background: rgba(255,255,255,0.03); }
        .scale-item.active { border: 2px solid white; }
        .scale-item div:first-child { font-weight: 700; font-size: 1.1em; }
        .activity-card { background: rgba(255,255,255,0.05); padding: 1rem; margin-bottom: 1rem; border-radius: 8px; border-left: 4px solid var(--accent); }
        .urgency-high { border-left-color: var(--red); }
        .urgency-medium { border-left-color: var(--yellow); }
        .urgency-low { border-left-color: var(--green); }
        .trend-item { padding: 0.75rem 0; border-bottom: 1px solid var(--border); font-size: var(--font-sm); }
        .trend-item:last-child { border-bottom: none; }
        .trend-topic { font-weight: 600; color: #60a5fa; }
        .sentiment-positive { color: var(--green); }
        .sentiment-negative { color: var(--red); }
        .sentiment-neutral { color: var(--yellow); }
        .sidebar .section { margin-bottom: 1rem; }
        .sidebar h3 { font-size: clamp(1rem,2.5vw,1.1rem); margin-bottom: 0.5rem; }
        .aal-thresholds { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 0.5rem; }
        .threshold { display: flex; align-items: center; font-size: 0.85rem; }
        .threshold-bar { width: 100%; height: 8px; background: #334155; border-radius: 4px; overflow: hidden; margin-left: 0.5rem; }
        .threshold-fill { height: 100%; transition: width .3s ease; }
        .threshold-1 .threshold-fill { background: var(--green); width: 20%; }
        .threshold-2 .threshold-fill { background: var(--yellow); width: 40%; }
        .threshold-3 .threshold-fill { background: var(--orange); width: 60%; }
        .threshold-4 .threshold-fill { background: var(--red); width: 80%; }
        .threshold-5 .threshold-fill { background: var(--darkred); width: 100%; }
        .current-aal { font-weight: 700; }
        .footer { margin-top: auto; background: #111827; padding: clamp(1.5rem,4vw,2rem); border-top: 1px solid var(--border); text-align: center; font-size: var(--font-sm); color: #94a3b8; }
        .footer a { color: inherit; text-decoration: underline; }
        .update-status { font-size: 0.8rem; color: #10b981; text-align: center; margin-top: 0.5rem; }
        @media (max-width: 480px) { .aal-stats { flex-direction: column; align-items: center; } .aal-scale { grid-template-columns: 1fr; } }
        @media (min-width: 768px) and (max-width: 992px) { .container { grid-template-columns: 1fr; } }
    </style>
</head>
<body>
    <div class="container">
        <div class="main-content">
            <div class="header">
                <h1>AAL Хезболла</h1>
                <p>Лидерство | Инфраструктура | Активность | Угрозы | <span id="last-update"><?= $data['last_update'] ?></span></p>
                <a href="/" class="back-link">← Назад к индексу</a>
            </div>

            <div class="section">
                <div class="aal-info">
                    <div class="aal-circle" id="aal-circle" style="background:<?= $data['aal_color'] ?>"><?= $data['aal'] ?></div>
                    <h2 id="aal-text"><?= $data['aal_text'] ?></h2>
                    <div class="aal-stats">
                        <div><strong id="threat-level"><?= $data['analysis']['threat_level'] ?>/5</strong> Уровень угрозы</div>
                        <div><strong><?= $data['impact']['casualties'] ?></strong> Потери</div>
                        <div><strong><?= $data['analysis']['infrastructure'] ?></strong> Инфраструктура</div>
                    </div>
                </div>
                <p class="sources">Обновлено: <span id="sources-update"><?= $data['last_update'] ?></span> | Al Jazeera, Haaretz, ISW, Alma Center</p>
                <p class="update-status" id="update-status">Обновление через <span id="countdown">30:00</span></p>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">График AAL Хезболла (10 дней)</h2>
                <div class="chart-container"><canvas id="hezbollah-chart"></canvas></div>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">Шкала угроз</h2>
                <div class="aal-scale">
                    <div class="scale-item" style="background:#10b98120;"><div>1</div><div>Низкая угроза<br><small>Разоружение</small></div></div>
                    <div class="scale-item active" style="background:#f59e0b20;"><div>2</div><div>Средняя угроза<br><small>Восстановление</small></div></div>
                    <div class="scale-item" style="background:#f9731620;"><div>3</div><div>Высокая угроза<br><small>Атаки</small></div></div>
                    <div class="scale-item" style="background:#ef444420;"><div>4</div><div>Критическая угроза<br><small>Эскалация</small></div></div>
                    <div class="scale-item" style="background:#dc262620;"><div>5</div><div>Максимальная угроза<br><small>Война</small></div></div>
                </div>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">Недавние события</h2>
                <div id="recent-events">
                    <?php foreach ($data['analysis']['recent_events'] as $event): ?>
                        <div class="trend-item"><?= htmlspecialchars($event) ?></div>
                    <?php endforeach; ?>
                </div>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">Статус лидерства</h2>
                <div id="leadership-status">
                    <?php foreach ($data['analysis']['leadership_status'] as $leader => $status): ?>
                        <div class="trend-item">
                            <div class="trend-topic"><?= htmlspecialchars($leader) ?>:</div>
                            <div><?= htmlspecialchars($status) ?></div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">Статус инфраструктуры</h2>
                <div id="infrastructure-status">
                    <?php foreach ($data['analysis']['infrastructure_status'] as $infra => $status): ?>
                        <div class="trend-item">
                            <div class="trend-topic"><?= htmlspecialchars($infra) ?>:</div>
                            <div><?= htmlspecialchars($status) ?></div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">Текущие активности</h2>
                <div id="activities-list">
                    <?php foreach ($data['activities'] as $a): ?>
                        <div class="activity-card urgency-<?= strtolower($a['urgency']) ?>">
                            <div class="activity-type"><?= htmlspecialchars($a['type']) ?></div>
                            <div class="urgency-badge urgency-<?= strtolower($a['urgency']) ?>"><?= $a['urgency'] ?></div>
                            <div class="detail-item"><strong>Дата:</strong> <?= htmlspecialchars($a['date']) ?></div>
                            <div class="detail-item"><strong>Локация:</strong> <?= htmlspecialchars($a['location']) ?></div>
                            <div class="detail-item"><strong>Участники:</strong> <?= htmlspecialchars($a['participants']) ?></div>
                            <div class="detail-item"><strong>Тема:</strong> <?= htmlspecialchars($a['topic']) ?></div>
                            <div class="detail-item"><strong>Источник:</strong> <?= htmlspecialchars($a['source']) ?></div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>

            <div class="section">
                <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:.75rem;">Динамический анализ</h2>
                <p>Активность <strong><?= strtolower($data['aal_text']) ?></strong> (AAL <?= $data['aal'] ?>). <?= $data['analysis']['summary'] ?> Лидерство: <strong><?= $data['analysis']['leadership_status'] ?></strong>. Потери: <strong><?= $data['impact']['casualties'] ?></strong>.</p>
                <p><strong>Влияние на Израиль:</strong> <span class="impact-high"><?= $data['analysis']['israel_impact_summary'] ?></span>.</p>
                <p><strong>Экономика:</strong> <?= $data['analysis']['economic_risk_summary'] ?> = <strong><?= $data['impact']['threat_level'] ?></strong>.</p>
                <p><strong>Прогноз:</strong> AAL <?= $data['aal_text'] ?> <?= $data['analysis']['forecast_summary'] ?></p>
            </div>
        </div>

        <div class="sidebar">
            <div class="section">
                <h3>AAL</h3>
                <div style="font-size: clamp(2.5rem,8vw,3rem); text-align: center; color:<?= $data['aal_color'] ?>;" id="sidebar-aal"><?= $data['aal'] ?></div>
            </div>
            <div class="section">
                <h3>Пороги тревоги</h3>
                <div class="aal-thresholds">
                    <div class="threshold threshold-1"><span>1 – Низкая угроза</span><div class="threshold-bar"><div class="threshold-fill"></div></div></div>
                    <div class="threshold threshold-2"><span>2 – Средняя угроза</span><div class="threshold-bar"><div class="threshold-fill"></div></div></div>
                    <div class="threshold threshold-3"><span>3 – Высокая угроза</span><div class="threshold-bar"><div class="threshold-fill"></div></div></div>
                    <div class="threshold threshold-4"><span>4 – Критическая угроза</span><div class="threshold-bar"><div class="threshold-fill"></div></div></div>
                    <div class="threshold threshold-5"><span>5 – Максимальная угроза</span><div class="threshold-bar"><div class="threshold-fill"></div></div></div>
                </div>
                <p style="margin-top: 0.5rem; font-size: 0.8rem; text-align: center;">Текущий: <span class="current-aal"><?= $data['aal'] ?></span></p>
            </div>
            <div class="section">
                <h3>Достоверность</h3>
                <p>Подтверждено: <?= $data['reliability']['confirmed'] ?></p>
                <p>Вероятно: <?= $data['reliability']['probable'] ?></p>
                <p>Неизвестно: <?= $data['reliability']['unknown'] ?></p>
            </div>
            <div class="section">
                <h3>Источники</h3>
                <p><a href="https://www.aljazeera.com/tag/hezbollah/" target="_blank">Al Jazeera</a></p>
                <p><a href="https://www.haaretz.com/" target="_blank">Haaretz</a></p>
                <p><a href="https://understandingwar.org/" target="_blank">ISW</a></p>
                <p><a href="https://www.washingtoninstitute.org/" target="_blank">Washington Institute</a></p>
            </div>
            <div class="section">
                <h3>Обновление</h3>
                <p><strong>Последнее:</strong> <span id="sidebar-update"><?= date('H:i') ?></span></p>
                <p><strong>Следующее:</strong> <span id="next-update">--:--</span></p>
            </div>
        </div>
    </div>

    <div class="footer">
        <p><strong>Avatiah Security Index</strong> — OSINT в реальном времени</p>
        <p>© 2025 Avatiah. Данные: Al Jazeera, Haaretz, ISW, Alma Center • <?= date('d.m.Y H:i') ?></p>
    </div>

    <script>
        const js = <?= $js_data ?>;

        // График
        const chart = new Chart(document.getElementById('hezbollah-chart'), {
            type: 'line',
            data: {
                labels: ['25.10','26.10','27.10','28.10','29.10','30.10','31.10','01.11','02.11','03.11'],
                datasets: [{
                    label: 'AAL Хезболла',
                    data: js.chart_data,
                    borderColor: '#b22222',
                    backgroundColor: 'rgba(178,34,34,0.1)',
                    fill: true,
                    tension: 0.4
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: { legend: { display: false } },
                scales: { y: { beginAtZero: true, max: 5, ticks: { stepSize: 1 } } }
            }
        });

        // Обновление
        async function updateData() {
            try {
                await fetch('fetch_hezbollah.php?' + Date.now());
                const r = await fetch('hezbollah_cache.json?' + Date.now());
                const data = await r.json();

                document.getElementById('last-update').textContent = data.last_update;
                document.getElementById('aal-circle').textContent = data.aal;
                document.getElementById('aal-circle').style.background = data.aal_color;
                document.getElementById('aal-text').textContent = data.aal_text;
                document.getElementById('threat-level').textContent = data.analysis.threat_level + '/5';

                chart.data.datasets[0].data = data.chart_data;
                chart.update('quiet');

                const activitiesList = document.getElementById('activities-list');
                activitiesList.innerHTML = '';
                data.activities.forEach(a => {
                    activitiesList.innerHTML += `
                        <div class="activity-card urgency-${a.urgency.toLowerCase()}">
                            <div class="activity-type">${a.type}</div>
                            <div class="urgency-badge urgency-${a.urgency.toLowerCase()}">${a.urgency}</div>
                            <div class="detail-item"><strong>Дата:</strong> ${a.date}</div>
                            <div class="detail-item"><strong>Локация:</strong> ${a.location}</div>
                            <div class="detail-item"><strong>Участники:</strong> ${a.participants}</div>
                            <div class="detail-item"><strong>Тема:</strong> ${a.topic}</div>
                            <div class="detail-item"><strong>Источник:</strong> ${a.source}</div>
                        </div>`;
                });

                const eventsList = document.getElementById('recent-events');
                eventsList.innerHTML = '';
                data.analysis.recent_events.forEach(e => {
                    const div = document.createElement('div');
                    div.className = 'trend-item';
                    div.innerHTML = `<div class="trend-topic">${e}</div>`;
                    eventsList.appendChild(div);
                });

                const leadershipList = document.getElementById('leadership-status');
                leadershipList.innerHTML = '';
                Object.entries(data.analysis.leadership_status).forEach(([k, v]) => {
                    const div = document.createElement('div');
                    div.className = 'trend-item';
                    div.innerHTML = `<div class="trend-topic">${k}:</div><div>${v}</div>`;
                    leadershipList.appendChild(div);
                });

                const infrastructureList = document.getElementById('infrastructure-status');
                infrastructureList.innerHTML = '';
                Object.entries(data.analysis.infrastructure_status).forEach(([k, v]) => {
                    const div = document.createElement('div');
                    div.className = 'trend-item';
                    div.innerHTML = `<div class="trend-topic">${k}:</div><div>${v}</div>`;
                    infrastructureList.appendChild(div);
                });

                document.getElementById('sources-update').textContent = data.last_update;
                document.getElementById('sidebar-update').textContent = new Date().toTimeString().slice(0,5);
                document.getElementById('update-status').textContent = 'Обновлено!';
                setTimeout(() => document.getElementById('update-status').textContent = 'Обновление через 30:00', 3000);
            } catch (e) { console.error(e); }
        }

        const UPDATE_INTERVAL_MINUTES = <?= $update_interval ?>;
        let countdownInterval;
        function startCountdown() {
            const now = Date.now();
            const next = Math.ceil(now / (UPDATE_INTERVAL_MINUTES * 60 * 1000)) * (UPDATE_INTERVAL_MINUTES * 60 * 1000);
            let remaining = next - now;
            countdownInterval = setInterval(() => {
                remaining -= 1000;
                const min = String(Math.floor(remaining / 60000)).padStart(2, '0');
                const sec = String(Math.floor((remaining % 60000) / 1000)).padStart(2, '0');
                document.getElementById('countdown').textContent = `${min}:${sec}`;
                document.getElementById('next-update').textContent = new Date(next).toTimeString().slice(0, 5);
                if (remaining <= 0) {
                    clearInterval(countdownInterval);
                    updateData().then(startCountdown);
                }
            }, 1000);
        }

        startCountdown();
        setTimeout(updateData, 30000);
    </script>
</body>
</html>