<?php
/* iran.php – AAL Iran | Avatiah Security Index
   Чистая, адаптивная, самообновляемая страница
   Обновление: каждые 120 мин
   Кэш: iran_cache.json
   API: fetch_iran.php
*/

if (pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION) !== 'php') {
    http_response_code(301);
    header('Location: ' . $_SERVER['REQUEST_URI'] . '.php');
    exit;
}

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

// --- 1. Чтение кэша ---
$cache_file = __DIR__ . '/iran_cache.json';
$data = [
    'last_update' => '04.11.2025 10:00 UTC',
    'aal' => 4.1,
    'aal_text' => 'Угроза',
    'aal_color' => '#ef4444',
    'analysis' => [
        'threat_level' => 4,
        'drone_production' => '+25% (Mohajer-6 для Венесуэлы)',
        'missile_tests' => 3,
        'hormuz_risk' => 'Высокий (инспекции на Абу-Муса и Сири, 02.11.2025)',
        'israel_rhetoric' => 'Жёсткая (Арагчи: "Болезненный ответ")',
        'proxy_activity' => 'Хуситы, Хезболла, ХАМАС',
        'summary' => 'Иран проводит учения в Ормузском проливе, угрожает закрытием.',
        'israel_impact_summary' => 'Угроза ударов по танкерам.',
        'economic_risk_summary' => 'Закрытие Ормуза',
        'forecast_summary' => 'стабилен, но +0.5 при блокаде или ударе по Израилю.',
        'recent_events' => [
            '2025-11-03: Венесуэла запрашивает дроны от Ирана.',
            '2025-11-02: Дроновые учения IRGC в северо-западном Иране.',
            '2025-11-01: Атаки на IRGC в Систане и Белуджистане.',
            '2025-10-31: Инспекция Вахиди на авиабазе Артеш в Бушере.',
            '2025-10-29: Развёртывание PMF в Ниневии.',
            '2025-10-28: Усиление Хезболлы севернее Литани.'
        ],
        'proxy_status' => [
            'Iraq' => '50-я бригада PMF удалена из Хамдании (03.11.2025).',
            'Syria' => 'Атака ИГИЛ на штаб МО Сирии (02.11.2025).',
            'Lebanon' => 'Хезболла собирает оружие из разрушенных сайтов.',
            'Yemen' => 'Хуситы атакуют суда в Красном море.',
            'Gaza' => 'ХАМАС получает дроны через Иран.',
            'Venezuela' => 'Запрос на дроны и РЭБ.'
        ]
    ],
    'reliability' => ['confirmed' => 8, 'probable' => 4, 'unknown' => 2],
    'chart_data' => [3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1],
    'statements' => [
        ['text' => 'Иран продолжает инспекции военных объектов в Персидском заливе. IRGC усиливает присутствие на островах Абу-Муса и Сири.', 'time' => '4 ч назад', 'tone' => 'Предупреждение', 'source' => 'Critical Threats'],
        ['text' => 'Венесуэла запросила дроны и системы РЭБ у Ирана. Сделка может быть одобрена в ближайшие дни.', 'time' => '4 ч назад', 'tone' => 'Жёсткий', 'source' => 'Critical Threats'],
        ['text' => 'IRGC Navy усиливает патрулирование в Ормузском проливе. Готовность к блокаде.', 'time' => '6 ч назад', 'tone' => 'Жёсткий', 'source' => 'ISW'],
        ['text' => 'Хезболла восстанавливает арсеналы севернее реки Литани. ЛАФ не вмешивается.', 'time' => '8 ч назад', 'tone' => 'Предупреждение', 'source' => 'ISW'],
        ['text' => 'Иран увеличил производство дронов на 25% для экспорта в Венесуэлу.', 'time' => '10 ч назад', 'tone' => 'Жёсткий', 'source' => 'Critical Threats']
    ],
    'impact' => [
        'hormuz_closure' => 'Потери: $2.5 млрд/день',
        'israel_strikes' => 'Риск эскалации: +40%',
        'oil_price' => '+$15/баррель'
    ]
];

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'];
$aal = 1.0 + ($threat - 1) * 0.7;
$data['aal'] = round($aal, 1);
$data['aal_text'] = $aal >= 4 ? 'Критический риск' : ($aal >= 3.5 ? 'Угроза' : ($aal >= 3 ? 'Повышенное внимание' : ($aal >= 2 ? 'Оперативная активность' : 'Минимальный риск')));
$data['aal_color'] = $aal >= 4 ? '#dc2626' : ($aal >= 3.5 ? '#ef4444' : ($aal >= 3 ? '#f97316' : ($aal >= 2 ? '#f59e0b' : '#10b981')));

// --- 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']['iran'] = ['aal' => $data['aal'], 'last_update' => $data['last_update']];
$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/iran.json ---
$factors_dir = __DIR__ . '/factors';
if (!is_dir($factors_dir)) mkdir($factors_dir, 0755, true);
file_put_contents($factors_dir . '/iran.json', json_encode([
    'aal' => $data['aal'],
    'last_update' => $data['last_update'],
    'analysis' => $data['analysis'],
    'statements' => $data['statements'],
    '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="AAL Иран: <?= $data['aal'] ?>. <?= $data['last_update'] ?> | IRGC, Ормуз, прокси">
    <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;
            --dark-red: #dc2626;
            --font-sm: 0.875rem;
            --font-xs: 0.75rem;
        }
        * { box-sizing: border-box; margin: 0; padding: 0; }
        body {
            background: var(--bg);
            color: var(--text);
            font-family: 'Inter', sans-serif;
            line-height: 1.6;
            padding: 1rem;
            display: flex;
            flex-direction: column;
            min-height: 100vh;
        }
        .container { max-width: 1600px; margin: 0 auto; display: grid; gap: 1.5rem; }
        @media (min-width: 768px) { .container { grid-template-columns: 1fr 340px; } }

        .header {
            background: linear-gradient(135deg, #8e2de2, #4a00e0);
            color: white;
            padding: 2rem;
            border-radius: 16px;
            text-align: center;
        }
        .header h1 { font-size: 2.8rem; margin-bottom: 0.5rem; }
        .back-link { display: inline-block; margin-top: 1rem; color: white; text-decoration: underline; }

        .section {
            background: var(--card);
            border-radius: 12px;
            padding: 1.5rem;
            border: 1px solid var(--border);
        }

        .aal-circle {
            width: 140px; height: 140px; border-radius: 50%; margin: 0 auto 1rem;
            display: flex; align-items: center; justify-content: center;
            font-size: 3rem; font-weight: 700; color: white;
        }
        .aal-info h2 { font-size: 1.8rem; margin: 0.5rem 0; text-align: center; }
        .aal-stats { display: flex; flex-wrap: wrap; justify-content: center; gap: 1rem; margin: 1rem 0; font-size: 0.95rem; }
        .impact-high { color: var(--red); font-weight: 600; }

        .chart-container { position: relative; height: 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: 0.9rem; border-radius: 8px; text-align: center; background: rgba(255,255,255,0.03); font-size: 0.9rem; }
        .scale-item.active { border: 2px solid white; }

        .statement-card {
            background: rgba(255,255,255,0.05);
            padding: 1rem;
            margin-bottom: 0.8rem;
            border-radius: 8px;
            font-size: 0.95rem;
        }
        .tone {
            padding: 0.2rem 0.6rem;
            border-radius: 6px;
            font-weight: 600;
            font-size: 0.75rem;
            display: inline-block;
        }
        .tone-hard { background: #dc2626; color: white; }
        .tone-warning { background: #f97316; color: white; }
        .tone-threat { background: #c0392b; color: white; }

        .events-list, .proxy-list { list-style: none; padding: 0; }
        .events-list li, .proxy-list li {
            padding: 0.6rem 0;
            border-bottom: 1px solid rgba(255,255,255,0.1);
            font-size: 0.9rem;
        }

        .sidebar .section { margin-bottom: 1rem; }
        .sidebar h3 { font-size: 1.1rem; margin-bottom: 0.5rem; }
        .aal-thresholds { display: flex; flex-direction: column; gap: 0.4rem; }
        .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: #7f1d1d; width: 100%; }
        .current-aal { font-weight: 700; color: var(--yellow); }

        .update-status { font-size: 0.8rem; color: #10b981; text-align: center; margin-top: 0.5rem; }
        .footer { margin-top: auto; background: #111827; padding: 2rem; border-top: 1px solid var(--border); text-align: center; color: #94a3b8; font-size: 0.9rem; }
        .footer a { color: inherit; text-decoration: underline; }
    </style>
</head>
<body>
<div class="container">
    <div class="main-content">
        <div class="header">
            <h1>Угроза со стороны Ирана</h1>
            <p>IRGC | Ормуз | Прокси | <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['analysis']['drone_production'] ?></strong> Дроны</div>
                </div>
                <div class="aal-stats">
                    <div>Ормуз: <span class="impact-high"><?= $data['analysis']['hormuz_risk'] ?></span></div>
                    <div>Риторика: <?= $data['analysis']['israel_rhetoric'] ?></div>
                </div>
            </div>
            <p style="font-size:0.9rem; margin-top:1rem; opacity:0.8;">
                Обновлено: <span id="sources-update"><?= $data['last_update'] ?></span> | Critical Threats, ISW, Tasnim
            </p>
            <p class="update-status" id="update-status">Обновление через <span id="countdown">120:00</span></p>
        </div>

        <div class="section">
            <h2>График AAL Иран (10 дней)</h2>
            <div class="chart-container"><canvas id="aal-chart"></canvas></div>
        </div>

        <div class="section">
            <h2>Шкала угроз</h2>
            <div class="aal-scale">
                <div class="scale-item"><div>1</div><div>Минимальный</div></div>
                <div class="scale-item"><div>2</div><div>Оперативная</div></div>
                <div class="scale-item"><div>3</div><div>Повышенное</div></div>
                <div class="scale-item active"><div>4</div><div>Угроза</div></div>
                <div class="scale-item"><div>5</div><div>Критическая</div></div>
            </div>
        </div>

        <div class="section">
            <h2>Последние заявления</h2>
            <div id="statements-list">
                <?php foreach ($data['statements'] as $s): ?>
                    <div class="statement-card">
                        <p><strong>"<?= htmlspecialchars($s['text']) ?>"</strong></p>
                        <p>
                            <span class="tone tone-<?= $s['tone'] === 'Жёсткий' ? 'hard' : ($s['tone'] === 'Предупреждение' ? 'warning' : 'threat') ?>">
                                <?= $s['tone'] ?>
                            </span>
                            • <?= $s['time'] ?> • <small><?= htmlspecialchars($s['source']) ?></small>
                        </p>
                    </div>
                <?php endforeach; ?>
            </div>
        </div>

        <div class="section">
            <h2>Динамический анализ</h2>
            <p>Угроза <strong><?= strtolower($data['aal_text']) ?></strong> (AAL <?= $data['aal'] ?>). <?= $data['analysis']['summary'] ?> Производство дронов <strong><?= $data['analysis']['drone_production'] ?></strong>.</p>
            <p><strong>Влияние на Израиль:</strong> <span class="impact-high">Прокси (<?= $data['analysis']['proxy_activity'] ?>) — <?= $data['impact']['israel_strikes'] ?></span>.</p>
            <p><strong>Экономика:</strong> <?= $data['analysis']['economic_risk_summary'] ?> = <strong><?= $data['impact']['hormuz_closure'] ?></strong>. Нефть <strong><?= $data['impact']['oil_price'] ?></strong>.</p>
            <p><strong>Прогноз:</strong> AAL <?= $data['aal_text'] ?> <?= $data['analysis']['forecast_summary'] ?></p>

            <h3>Недавние события</h3>
            <ul class="events-list" id="recent-events">
                <?php foreach ($data['analysis']['recent_events'] as $event): ?>
                    <li><?= htmlspecialchars($event) ?></li>
                <?php endforeach; ?>
            </ul>

            <h3>Статус прокси</h3>
            <ul class="proxy-list" id="proxy-status">
                <?php foreach ($data['analysis']['proxy_status'] as $region => $status): ?>
                    <li><strong><?= htmlspecialchars($region) ?>:</strong> <?= htmlspecialchars($status) ?></li>
                <?php endforeach; ?>
            </ul>
        </div>
    </div>

    <div class="sidebar">
        <div class="section">
            <h3>AAL</h3>
            <div style="font-size: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;text-align:center;">Текущий: <span class="current-aal" id="sidebar-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><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. Данные: Critical Threats, ISW, Tasnim • <?= date('d.m.Y H:i') ?></p>
</div>

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

    const chart = new Chart(document.getElementById('aal-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: '#ef4444',
                backgroundColor: 'rgba(239,68,68,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_iran.php?' + Date.now());
            const r = await fetch('iran_cache.json?' + Date.now());
            const data = await r.json();

            // Обновление AAL
            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('sidebar-aal').textContent = data.aal;
            document.getElementById('sidebar-current-aal').textContent = data.aal;
            document.getElementById('threat-level').textContent = data.analysis.threat_level + '/5';

            // График
            chart.data.datasets[0].data = data.chart_data;
            chart.update();

            // Заявления
            const list = document.getElementById('statements-list');
            list.innerHTML = '';
            data.statements.forEach(s => {
                const toneClass = s.tone === 'Жёсткий' ? 'tone-hard' : (s.tone === 'Предупреждение' ? 'tone-warning' : 'tone-threat');
                list.innerHTML += `
                    <div class="statement-card">
                        <p><strong>"${s.text}"</strong></p>
                        <p><span class="tone ${toneClass}">${s.tone}</span> • ${s.time} • <small>${s.source}</small></p>
                    </div>`;
            });

            // События и прокси
            document.getElementById('recent-events').innerHTML = data.analysis.recent_events.map(e => `<li>${e}</li>`).join('');
            document.getElementById('proxy-status').innerHTML = Object.entries(data.analysis.proxy_status)
                .map(([k, v]) => `<li><strong>${k}:</strong> ${v}</li>`).join('');

            // Время
            document.getElementById('last-update').textContent = data.last_update;
            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 = 'Обновление через 120:00', 3000);
        } catch (e) { console.error('Update 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>