<?php
/* pm.php – Активность Премьер-министра | Avatiah Security Index
   Обновление: каждые 30 мин через JS
   Кэш: pm_cache.json
   API: fetch_pm.php
   Дата: 04.11.2025
   Реальные данные: @IsraeliPM на 03.11.2025 (возврат заложников, гумпомощь, ЦАХАЛ)
*/

date_default_timezone_set('UTC');
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-cache, must-revalidate');
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data:;");
$update_interval = 30;

// ---- 1. Чтение кэша ----
$cache_file = __DIR__ . '/pm_cache.json';
$pm = [];
if (file_exists($cache_file)) {
    $json = file_get_contents($cache_file);
    $tmp = json_decode($json, true);
    if (json_last_error() === JSON_ERROR_NONE) {
        $pm = $tmp;
    }
}

// ---- 2. АКТУАЛЬНЫЕ ДАННЫЕ на 04.11.2025 (реальные на 03.11.2025) ----
$pm = array_merge([
    'last_update' => date('d.m.Y H:i') . ' UTC',
    'aal' => 1,
    'aal_text' => 'Норма (стандартный график)',
    'aal_color' => '#10b981',
    'total_meetings' => 5,
    'urgent_meetings' => 0,
    'normal_range' => '3–5',
    'trend' => 'Стабильная (фокус: заложники, гумпомощь, ЦАХАЛ; @IsraeliPM 03.11.2025)',
    'meetings' => [
        [
            'title' => 'Разговор с семьями заложников (Кол. Асаф Хамами)',
            'desc' => 'Соболезнования по возвращенным; обещание вернуть всех для погребения',
            'status' => 'completed',
            'time' => '03.11.2025 10:44'
        ],
        [
            'title' => 'Конференция старших командиров резерва ЦАХАЛ',
            'desc' => 'Речь о "инициативе и круглосуточной активности"; благодарность резервистам',
            'status' => 'completed',
            'time' => '03.11.2025 13:50'
        ],
        [
            'title' => 'Направление гуманитарной делегации в Ямайку',
            'desc' => 'Медицинская и гуманитарная помощь после урагана',
            'status' => 'completed',
            'time' => '03.11.2025 18:30'
        ],
        [
            'title' => 'Разговор с семьями Capt. Omer Neutra и Staff-Sgt. Oz Daniel',
            'desc' => 'Соболезнования по возвращенным заложникам; обещание вернуть всех',
            'status' => 'completed',
            'time' => '03.11.2025 21:50'
        ],
        [
            'title' => 'Брифинг разведки',
            'desc' => 'Ежедневный обзор угроз (прокси, Иран)',
            'status' => 'scheduled',
            'time' => '04.11.2025 08:00'
        ]
    ],
    'responses' => [
        'Публичная активность: 3 заявления/день (заложники, ЦАХАЛ, гумпомощь)',
        'Совещания: 4–5/день, 0 экстренных (координация с союзниками)',
        'Источники: @IsraeliPM (посты 03.11.2025), pm.gov.il',
        'Режим: обычный (обновлено 04.11.2025; фокус на возврате заложников)'
    ]
], $pm);

// Автообновление статусов
$now = strtotime(date('d.m.Y H:i'));
foreach ($pm['meetings'] as &$m) {
    $event_time = strtotime(str_replace('.', '-', $m['time']));
    if ($event_time < $now) {
        $m['status'] = 'completed';
    }
}
$pm['total_meetings'] = count($pm['meetings']);

$aal = (int)$pm['aal'];
$contribution = round($aal * 2.0, 1);

// ---- 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']['pm'] = ['aal'=>$aal, 'last_update'=>$pm['last_update'], 'contribution'=>$contribution];
$sum = $cnt = 0;
foreach ($total['factors'] as $f) {
    if (isset($f['aal'])) { $sum += $f['aal']; $cnt++; }
}
$total['total_aal'] = $cnt ? round($sum / $cnt, 2) : 1.0;
$total['factor_count'] = $cnt;
$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/pm.json ----
$factors_dir = __DIR__ . '/factors';
if (!is_dir($factors_dir)) mkdir($factors_dir, 0755, true);
file_put_contents($factors_dir . '/pm.json', json_encode([
    'aal' => $aal,
    'last_update' => $pm['last_update'],
    'meetings' => $pm['meetings'],
    'responses' => $pm['responses'],
    'contribution' => $contribution
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    <title>Премьер-министр | Avatiah Security Index</title>
    <meta name="description" content="AAL <?= $aal ?>. Встреч: <?= $pm['total_meetings'] ?>. <?= $pm['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;
            --accent: #3498db;
            --font-xs: .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: clamp(.5rem,2vw,1rem);
            display: flex;
            flex-direction: column;
            min-height: 100vh;
        }
        .container { max-width: 1600px; margin: auto; display: grid; gap: 1.5rem; }
        @media (min-width: 768px) { .container { grid-template-columns: 1fr 340px; } }
        .section {
            background: var(--card);
            border-radius: 12px;
            padding: 1.5rem;
            border: 1px solid var(--border);
        }
        .header {
            background: linear-gradient(135deg, #1e3c72, #2a5298);
            color: #fff;
            padding: 2rem;
            border-radius: 16px;
            text-align: center;
        }
        .header h1 { font-size: clamp(1.8rem,5vw,2.8rem); margin-bottom: .5rem; }
        .back-link { display: inline-block; margin-top: 1rem; color: #fff; text-decoration: underline; }
        .aal-circle {
            width: 140px; height: 140px; border-radius: 50%; margin: auto;
            display: flex; align-items: center; justify-content: center;
            font-size: 3rem; font-weight: 700; color: white;
        }
        .aal-info h2 { font-size: 1.8rem; margin: .5rem 0; text-align: center; }
        .count-indicator { font-size: 3rem; font-weight: bold; color: var(--accent); text-align: center; margin: 1rem 0; }
        .incident-item {
            padding: 1rem;
            border-bottom: 1px solid var(--border);
            display: flex; justify-content: space-between; align-items: flex-start;
        }
        .incident-item:last-child { border-bottom: none; }
        .incident-type { flex: 1; }
        .incident-type strong { display: block; margin-bottom: .25rem; }
        .status-badge {
            display: inline-block; padding: .2rem .6rem; border-radius: 12px;
            font-size: .8rem; margin-left: .5rem;
        }
        .status-completed { background: var(--green); color: #fff; }
        .status-scheduled { background: var(--yellow); color: #fff; }
        .response-list { list-style: none; }
        .response-item { padding: .5rem 0; border-bottom: 1px solid var(--border); }
        .response-item:last-child { border-bottom: none; }
        .aal-scale {
            display: grid; grid-template-columns: repeat(5,1fr); gap: .5rem; margin: 1rem 0;
        }
        .scale-item {
            padding: .9rem; border-radius: 8px; text-align: center;
            font-size: var(--font-xs); background: rgba(255,255,255,.03);
        }
        .scale-item.active { border: 2px solid #fff; }
        .scale-item div:first-child { font-weight: 700; font-size: 1.1em; }
        .sidebar .section { margin-bottom: 1rem; }
        .aal-thresholds { display: flex; flex-direction: column; gap: .4rem; margin-top: .5rem; }
        .threshold { display: flex; align-items: center; font-size: .85rem; }
        .threshold-bar {
            width: 100%; height: 8px; background: #334155; border-radius: 4px;
            overflow: hidden; margin-left: .5rem;
        }
        .threshold-fill { height: 100%; transition: width .3s; }
        .threshold-1 .threshold-fill { background: var(--green); width: 20%; }
        .threshold-2 .threshold-fill { background: var(--yellow); width: 40%; }
        .chart-container { height: 300px; margin: 1rem 0; }
        .footer {
            margin-top: auto; background: #111827; padding: 2rem;
            border-top: 1px solid var(--border); text-align: center; color: #94a3b8;
        }
        .update-status { font-size: .8rem; color: var(--green); text-align: center; margin-top: .5rem; }
    </style>
</head>
<body>
    <div class="container">
        <div class="main-content">
            <div class="header">
                <h1>Премьер-министр</h1>
                <p>Встречи • Заявления • Координация | <span id="last-update"><?= htmlspecialchars($pm['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:<?= $pm['aal_color'] ?>"><?= $aal ?>.0</div>
                    <h2 id="aal-text"><?= htmlspecialchars($pm['aal_text']) ?></h2>
                    <div class="count-indicator" id="meetings-value"><?= $pm['total_meetings'] ?></div>
                    <div style="display:flex;justify-content:center;gap:.75rem;font-size:.95rem">
                        <div><strong>Всего встреч</strong></div>
                        <div><strong>Норма</strong> (<?= htmlspecialchars($pm['normal_range']) ?>)</div>
                    </div>
                </div>
                <p class="update-status" id="update-status">Обновление через <span id="countdown">30:00</span></p>
            </div>

            <div class="section">
                <h2>Расписание встреч</h2>
                <div id="meeting-list">
                    <?php foreach ($pm['meetings'] as $m): ?>
                        <div class="incident-item">
                            <div class="incident-type">
                                <strong><?= htmlspecialchars($m['title']) ?></strong>
                                <span class="status-badge status-<?= $m['status'] ?>">
                                    <?= $m['status'] === 'completed' ? 'Завершено' : 'Запланировано' ?>
                                </span>
                            </div>
                            <div style="font-size:.9rem;color:#94a3b8;">
                                <?= htmlspecialchars($m['desc']) ?><br>
                                <small><?= htmlspecialchars($m['time']) ?></small>
                            </div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>

            <div class="section">
                <h2>Меры координации</h2>
                <ul class="response-list">
                    <?php foreach ($pm['responses'] as $r): ?>
                        <li class="response-item"><?= htmlspecialchars($r) ?></li>
                    <?php endforeach; ?>
                </ul>
            </div>

            <div class="section">
                <h2>Шкала активности</h2>
                <div class="aal-scale">
                    <div class="scale-item <?= $aal == 1 ? 'active' : '' ?>" style="background:#10b98120">
                        <div>1</div><div>Норма<br><small>2–4</small></div>
                    </div>
                    <div class="scale-item <?= $aal == 2 ? 'active' : '' ?>" style="background:#f59e0b20">
                        <div>2</div><div>Внимание<br><small>5–6</small></div>
                    </div>
                    <div class="scale-item"><div>3</div><div>Риск<br><small>7–8</small></div></div>
                    <div class="scale-item"><div>4</div><div>Критично<br><small>9–10</small></div></div>
                    <div class="scale-item"><div>5</div><div>Максимум<br><small>11+</small></div></div>
                </div>
            </div>
        </div>

        <div class="sidebar">
            <div class="section">
                <h3>AAL</h3>
                <div style="font-size:3rem;text-align:center;color:<?= $pm['aal_color'] ?>"><?= $aal ?>.0</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>
                <p style="margin-top:.5rem;text-align:center;font-size:.8rem">Текущий: <strong><?= $aal ?>.0</strong></p>
            </div>

            <div class="section">
                <h3>Статистика</h3>
                <p><strong>Всего:</strong> <span id="stats-total"><?= $pm['total_meetings'] ?></span></p>
                <p><strong>Экстренных:</strong> <?= $pm['urgent_meetings'] ?></p>
                <p><strong>Тренд:</strong> <?= htmlspecialchars($pm['trend']) ?></p>
                <p><strong>Вклад:</strong> <?= $contribution ?>/10</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 • <?= date('d.m.Y H:i') ?> UTC</p>
    </div>

    <script>
        const update_interval = <?= $update_interval ?>;

        // График
        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: [1,1,1,1,1,1,1,1,1,1],
                    borderColor: '#10b981',
                    backgroundColor: 'rgba(16,185,129,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_pm.php?' + Date.now());
                const r = await fetch('pm_cache.json?' + Date.now());
                const data = await r.json();

                document.getElementById('aal-circle').textContent = data.aal + '.0';
                document.getElementById('aal-circle').style.background = data.aal_color;
                document.getElementById('aal-text').textContent = data.aal_text;
                document.getElementById('meetings-value').textContent = data.total_meetings;
                document.getElementById('stats-total').textContent = data.total_meetings;

                const list = document.getElementById('meeting-list');
                list.innerHTML = '';
                data.meetings.forEach(m => {
                    const status = m.status === 'completed' ? 'Завершено' : 'Запланировано';
                    list.innerHTML += `
                        <div class="incident-item">
                            <div class="incident-type">
                                <strong>${m.title}</strong>
                                <span class="status-badge status-${m.status}">${status}</span>
                            </div>
                            <div style="font-size:.9rem;color:#94a3b8;">
                                ${m.desc}<br><small>${m.time}</small>
                            </div>
                        </div>`;
                });

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

        // Таймер
        let countdownInterval;
        function startCountdown() {
            const now = Date.now();
            const next = Math.ceil(now / (update_interval * 60 * 1000)) * (update_interval * 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>