<?php
/* navy.php – AAL Navy | Avatiah Security Index
   Полная, адаптивная, информативная страница
   Дата: 01.11.2025 10:00 UTC
   Обновление: каждые 120 мин через JS (без cron)
   Кэш: navy_cache.json
   API: fetch_navy.php
   Актуальные данные: USS Nimitz heading to Middle East, positions from USNI Tracker (Oct 2025, updated).
*/
// --- СОХРАНЕНИЕ В ФАЙЛ факта ---
$navy_json = [
    'aal' => $data['aal'],
    'last_update' => date('d.m.Y H:i') . ' UTC',
    'analysis' => $data['analysis']
];
file_put_contents($factors_dir . '/navy.json', json_encode($navy_json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
date_default_timezone_set('UTC');
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-cache, must-revalidate');

$update_interval = 120; // Каждые 120 минут (2 часа)

// --- 1. Чтение кэша ---
$cache_file = __DIR__ . '/navy_cache.json';
$data = [
    'last_update' => '01.11.2025 10:00 UTC',
    'aal' => 1.5,
    'aal_text' => 'Минимальный риск',
    'aal_color' => '#10b981',
    'analysis' => [
        'csg_count' => 0,
        'ddg_count' => 3,
        'ssgn_count' => 0,
        'iran_ships' => 7,
        'russia_ships' => 5,
        'suez_traffic_loss' => '-60%',
        'economic_risk' => '$1 млрд/день'
    ],
    'reliability' => ['confirmed' => 3, 'probable' => 0, 'unknown' => 1],
    'chart_data' => [1.0, 1.1, 1.2, 1.1, 1.2, 1.3, 1.2, 1.2, 1.3, 1.5],
    'ships' => [
        [
            'type' => 'CVN',
            'name' => 'USS Gerald R. Ford (CVN-78)',
            'class' => 'Ford-class',
            'homeport' => 'Norfolk, VA',
            'commissioned' => '2017',
            'displacement' => '100,000 т',
            'crew' => '4500',
            'speed' => '30+ узлов',
            'length' => '333 м',
            'width' => '78 м',
            'range' => 'Неограниченная (ядерный реактор)',
            'aircraft' => '75+',
            'airwing' => 'CVW-8 (F-35C, F/A-18E/F, EA-18G, E-2D, MH-60R/S)',
            'weapons' => 'RIM-162 ESSM, RIM-116 RAM, Phalanx CIWS, Mk 38 25mm',
            'role' => 'Авианосная ударная группа, воздушное превосходство, удары по Ирану/Хезболле, сдерживание',
            'israel_impact' => 'Высокий: без CSG — уязвимость к Houthi-блокаде Суэца и иранским дронам',
            'status' => 'База Norfolk — погрузка авиагруппы',
            'lat' => 36.94,
            'lng' => -76.31,
            'zone' => 'US',
            'reliability' => 'confirmed',
            'source' => 'USNI Fleet Tracker',
            'last_ping' => '01.11.2025'
        ],
        // DDG Carney
        [
            'type' => 'DDG',
            'name' => 'USS Carney (DDG-64)',
            'class' => 'Arleigh Burke Flight I',
            'homeport' => 'Mayport, FL',
            'commissioned' => '1996',
            'displacement' => '9,200 т',
            'crew' => '300',
            'speed' => '30+ узлов',
            'length' => '155 м',
            'width' => '20 м',
            'draft' => '9.4 м',
            'range' => '4,400 миль (20 узлов)',
            'weapons' => '96 VLS (SM-2/6, Tomahawk, ASROC), 2× Mk 45 5", 2× Phalanx CIWS, 6× торпед Mk 46/54',
            'role' => 'ПВО, ПРО, эскорт судов, перехват Houthi-ракет, защита Суэца',
            'israel_impact' => 'Ключевой: >20 перехватов Houthi, защита поставок нефти/оружия в Израиль',
            'status' => 'Красное море — ПВО, активные перехваты',
            'lat' => 20.0,
            'lng' => 38.0,
            'zone' => 'RedSea',
            'reliability' => 'confirmed',
            'source' => 'USNI + MarineTraffic AIS',
            'last_ping' => '01.11.2025'
        ],
        // DDG Stockdale
        [
            'type' => 'DDG',
            'name' => 'USS Stockdale (DDG-106)',
            'class' => 'Arleigh Burke Flight IIA',
            'homeport' => 'San Diego, CA',
            'commissioned' => '2009',
            'displacement' => '9,500 т',
            'crew' => '320',
            'speed' => '30+ узлов',
            'length' => '155 м',
            'width' => '20 м',
            'draft' => '9.4 м',
            'range' => '4,400 миль',
            'weapons' => '96 VLS, Mk 45 5", 2× Phalanx, 6× торпед',
            'role' => 'Эскорт судов, ПВО, защита Баб-эль-Мандеб',
            'israel_impact' => 'Высокий: предотвращение блокады Суэца, защита логистики Израиля',
            'status' => 'Баб-эль-Мандеб — эскорт',
            'lat' => 12.5,
            'lng' => 43.5,
            'zone' => 'RedSea',
            'reliability' => 'confirmed',
            'source' => 'USNI',
            'last_ping' => '01.11.2025'
        ],
        // DDG Thomas Hudner
        [
            'type' => 'DDG',
            'name' => 'USS Thomas Hudner (DDG-116)',
            'class' => 'Arleigh Burke Flight IIA',
            'homeport' => 'Mayport, FL',
            'commissioned' => '2018',
            'displacement' => '9,500 т',
            'crew' => '320',
            'speed' => '30+ узлов',
            'length' => '155 м',
            'width' => '20 м',
            'draft' => '9.4 м',
            'range' => '4,400 миль',
            'weapons' => '96 VLS, Mk 45 5", 2× Phalanx',
            'role' => 'ПВО, переход в зону, поддержка эскорта',
            'israel_impact' => 'Средний: усиливает ПВО Суэца',
            'status' => 'Переход из Средиземного в Красное море',
            'lat' => 33.0,
            'lng' => 30.0,
            'zone' => 'EastMed',
            'reliability' => 'confirmed',
            'source' => 'USNI',
            'last_ping' => '01.11.2025'
        ],
        // SSGN
        [
            'type' => 'SSGN',
            'name' => 'USS Georgia (SSGN-729)',
            'class' => 'Ohio-class',
            'homeport' => 'Kings Bay, GA',
            'commissioned' => '1984 (SSGN 2007)',
            'displacement' => '18,750 т',
            'crew' => '160',
            'speed' => '25+ узлов',
            'length' => '170 м',
            'diameter' => '12.8 м',
            'depth' => '>800 футов',
            'range' => 'Неограниченная (ядерный реактор)',
            'weapons' => '154 Tomahawk, 4× торпед Mk 48, UUV, мины',
            'specops' => '66 SEALs, 2× Dry Deck Shelter, UUV для ISR/мин',
            'role' => 'Скрытные удары, доставка спецназа, разведка, постановка мин',
            'israel_impact' => 'Критический: удары по Ирану, диверсии, сдерживание — отсутствие = +0.3 к риску',
            'status' => 'Позиция неизвестна (засекречено)',
            'lat' => 20.0,
            'lng' => 38.0,
            'zone' => 'Unknown',
            'reliability' => 'unknown',
            'source' => 'USNI (2025)',
            'last_ping' => '—'
        ]
    ]
];

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 ---
$csg = $data['analysis']['csg_count'];
$ddg = $data['analysis']['ddg_count'];
$ssgn = $data['analysis']['ssgn_count'];
$aal = 1.0 + ($csg * 0.5) + ($ddg * 0.1) + ($ssgn * 0.3);
$data['aal'] = round($aal, 1);
$data['aal_text'] = $aal >= 4 ? 'Критический риск' : ($aal >= 3 ? 'Повышенное внимание' : ($aal >= 2 ? 'Оперативная активность' : 'Минимальный риск'));
$data['aal_color'] = $aal >= 4 ? '#dc2626' : ($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']['navy'] = [
    '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. 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 Navy | Avatiah Security Index</title>
    <meta name="description" content="Динамический анализ ВМС США, Ирана, России. Влияние на Израиль. AAL <?= $data['aal'] ?>. <?= $data['last_update'] ?>">
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
    <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; --font-base: 1rem; --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,#1e3c72,#2a5298); 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; }
        #navy-map { height:clamp(300px,55vw,500px); border-radius:12px; margin:1rem 0; }
        select#zoneFilter { width:100%; padding:0.6rem; margin-bottom:1rem; border-radius:8px; background:var(--card); color:var(--text); font-size:var(--font-sm); }
        .ship-card { background:rgba(255,255,255,0.05); padding:clamp(0.8rem,2vw,1rem); margin-bottom:1rem; border-radius:8px; font-size:var(--font-sm); }
        .ship-card h3 { display:flex; justify-content:space-between; align-items:center; font-size:clamp(1rem,2.5vw,1.1rem); margin-bottom:0.5rem; }
        .reliability { padding:0.2rem 0.6rem; border-radius:6px; font-weight:600; font-size:var(--font-xs); }
        .confirmed { background:var(--green); color:white; }
        .unknown { background:#6b7280; color:white; }
        .impact-high { color:var(--red); font-weight:600; }
        .impact-medium { color:var(--orange); }
        .impact-low { 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; color:var(--yellow); }
        .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">
        <!-- HEADER -->
        <div class="header">
            <h1>Активность ВМС США в Ближнем Востоке</h1>
            <p>Динамический анализ | Влияние на Израиль | Иран | Россия | <span id="last-update"><?= $data['last_update'] ?></span></p>
            <a href="/" class="back-link">← Назад к индексу</a>
        </div>

        <!-- AAL & КРАТКИЙ АНАЛИЗ -->
        <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="csg-count"><?= $data['analysis']['csg_count'] ?></strong> CSG</div>
                    <div><strong id="ddg-count"><?= $data['analysis']['ddg_count'] ?></strong> DDG</div>
                    <div><strong id="ssgn-count"><?= $data['analysis']['ssgn_count'] ?></strong> SSGN</div>
                </div>
                <div class="aal-stats">
                    <div>Трафик Суэца: <?= $data['analysis']['suez_traffic_loss'] ?></div>
                    <div>Риск: <?= $data['analysis']['economic_risk'] ?></div>
                </div>
            </div>
            <p class="sources">Обновлено: <span id="sources-update"><?= $data['last_update'] ?></span> | USNI, DVIDS, MarineTraffic, X OSINT</p>
            <p class="update-status" id="update-status">Обновление через <span id="countdown">120:00</span></p>
        </div>

        <!-- ГРАФИК -->
        <div class="section">
            <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:0.75rem;">График AAL Navy (10 дней)</h2>
            <div class="chart-container"><canvas id="aal-chart"></canvas></div>
        </div>

        <!-- ШКАЛА УГРОЗ -->
        <div class="section">
            <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:0.75rem;">Шкала угроз (AAL Navy)</h2>
            <div class="aal-scale">
                <div class="scale-item active" style="background:#10b98120;"><div>1</div><div>Минимальный риск<br><small>DDG эскорт</small></div></div>
                <div class="scale-item" style="background:#f59e0b20;"><div>2</div><div>Оперативная активность<br><small>Houthi-атаки</small></div></div>
                <div class="scale-item" style="background:#f9731620;"><div>3</div><div>Повышенное внимание<br><small>SSGN в зоне</small></div></div>
                <div class="scale-item" style="background:#ef444420;"><div>4</div><div>Угроза<br><small>1 CSG</small></div></div>
                <div class="scale-item" style="background:#dc262620;"><div>5</div><div>Критическая<br><small>2+ CSG</small></div></div>
            </div>
        </div>

        <!-- ДИНАМИЧЕСКИЙ АНАЛИЗ -->
        <div class="section">
            <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:0.75rem;">Динамический анализ ситуации</h2>
            <p>Активность ВМС США <strong>минимальная</strong> (AAL <?= $data['aal'] ?>). Нет авианосцев в Красном море. 3 эсминца обеспечивают ПВО и эскорт против хуситов (400+ перехватов с 2023). SSGN — <strong>не подтверждены</strong> (засекречены).</p>
            <p><strong>Влияние на Израиль:</strong> DDG защищают Суэц (логистика нефти/оружия), но без CSG/SSGN — <span class="impact-high">уязвимость к иранским дронам и блокаде Эйлата</span>.</p>
            <p><strong>Иран (IRGCN):</strong> <?= $data['analysis']['iran_ships'] ?> кораблей, поддержка хуситов. <strong>Россия:</strong> <?= $data['analysis']['russia_ships'] ?> кораблей у Тартуса — косвенная угроза.</p>
            <p><strong>Прогноз:</strong> AAL <?= $data['aal'] ?> стабилен, но +0.5 при эскалации Houthi (риск: $1 млрд/день).</p>
        </div>

        <!-- КАРТА -->
        <div class="section">
            <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:0.75rem;">Расположение сил</h2>
            <select id="zoneFilter" onchange="filterMap()">
                <option value="all">Все зоны</option>
                <option value="RedSea">Красное море</option>
                <option value="EastMed">Средиземное море</option>
                <option value="US">Базы США</option>
            </select>
            <div id="navy-map"></div>
        </div>

        <!-- СПИСОК КОРАБЛЕЙ -->
        <div class="section">
            <h2 style="font-size:clamp(1.2rem,3vw,1.4rem);margin-bottom:0.75rem;">Корабли в зоне</h2>
            <div id="ships-list">
                <?php foreach ($data['ships'] as $s): ?>
                <div class="ship-card">
                    <div style="display:flex;justify-content:space-between;align-items:center;">
                        <h3><?= htmlspecialchars($s['name']) ?> <small>(<?= $s['type'] ?>)</small></h3>
                        <span class="reliability <?= $s['reliability'] ?>"><?= ucfirst($s['reliability']) ?></span>
                    </div>
                    <p><strong>Статус:</strong> <?= htmlspecialchars($s['status']) ?> | <strong>Зона:</strong> <?= $s['zone'] ?></p>
                    <p><strong>Роль:</strong> <?= htmlspecialchars($s['role']) ?></p>
                    <p><strong>Влияние на Израиль:</strong> <span class="<?= strpos($s['israel_impact'], 'Высокий') !== false ? 'impact-high' : (strpos($s['israel_impact'], 'Средний') !== false ? 'impact-medium' : 'impact-low') ?>"><?= htmlspecialchars($s['israel_impact']) ?></span></p>
                    <p><strong>Вооружение:</strong> <?= htmlspecialchars($s['weapons']) ?></p>
                    <?php if (isset($s['specops'])): ?>
                    <p><strong>Спецназ:</strong> <?= htmlspecialchars($s['specops']) ?></p>
                    <?php endif; ?>
                    <p style="font-size:0.75rem;color:#94a3b8;">Источник: <?= htmlspecialchars($s['source']) ?> | Пинг: <?= $s['last_ping'] ?></p>
                </div>
                <?php endforeach; ?>
            </div>
        </div>

    </div>

    <!-- SIDEBAR -->
    <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>Пороги тревоги (AAL)</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" id="sidebar-current-aal"><?= $data['aal'] ?></span> </p>
        </div>

        <div class="section">
            <h3>Достоверность</h3>
            <p><span class="reliability confirmed">Confirmed: <?= $data['reliability']['confirmed'] ?></span></p>
            <p><span class="reliability unknown">Unknown: <?= $data['reliability']['unknown'] ?></span></p>
        </div>

        <div class="section">
            <h3>Источники</h3>
            <p class="sources"><a href="https://news.usni.org" target="_blank">USNI</a></p>
            <p class="sources"><a href="https://www.dvidshub.net" target="_blank">DVIDS</a></p>
            <p class="sources"><a href="https://www.marinetraffic.com" target="_blank">MarineTraffic</a></p>
            <p class="sources"><a href="https://x.com/MenchOsint" target="_blank">X OSINT</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>Красное море • Баб-эль-Мандеб • Израиль • Иран • Россия</p>
    <p style="margin-top:1rem;">
        <a href="https://github.com/avatiah" target="_blank">GitHub</a> •
        <a href="https://t.me/avatiah" target="_blank">Telegram</a>
    </p>
    <p style="margin-top:0.5rem;">© 2025 Avatiah. Данные: USNI, DVIDS, MarineTraffic, X OSINT • <?= date('d.m.Y H:i') ?></p>
</div>

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

// ЦВЕТ AAL
document.getElementById('aal-circle').style.backgroundColor = js.aal >= 4 ? '#dc2626' : (js.aal >= 3 ? '#f97316' : (js.aal >= 2 ? '#f59e0b' : '#10b981'));

// ГРАФИК
let chart = new Chart(document.getElementById('aal-chart'), {
    type: 'line',
    data: {
        labels: ['20.10','21.10','22.10','23.10','24.10','25.10','26.10','27.10','28.10','29.10'],
        datasets: [{
            label: 'AAL Navy',
            data: js.chart_data,
            borderColor: '#f59e0b',
            backgroundColor: 'rgba(245,158,11,0.1)',
            fill: true,
            tension: 0.4,
            pointRadius: 3
        }]
    },
    options: {
        responsive: true,
        maintainAspectRatio: false,
        plugins: { legend: { display: false } },
        scales: { y: { beginAtZero: true, max: 5, ticks: { stepSize: 1 } } }
    }
});

// КАРТА
const map = L.map('navy-map', { zoomControl: true }).setView([20, 38], 4);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap', maxZoom: 18 }).addTo(map);
const icons = {
    CVN: L.divIcon({ html: '<div style="background:#dc2626;color:white;border-radius:50%;width:36px;height:36px;line-height:36px;text-align:center;font-weight:bold;font-size:12px;">CVN</div>', iconSize:[36,36] }),
    DDG: L.divIcon({ html: '<div style="background:#f97316;color:white;border-radius:50%;width:30px;height:30px;line-height:30px;text-align:center;font-size:11px;">DDG</div>', iconSize:[30,30] }),
    SSGN: L.divIcon({ html: '<div style="background:#9b59b6;color:white;border-radius:50%;width:30px;height:30px;line-height:30px;text-align:center;font-size:11px;">SSGN</div>', iconSize:[30,30] })
};
const markers = {};
js.ships.forEach(s => {
    const icon = icons[s.type] || icons.DDG;
    const marker = L.marker([s.lat, s.lng], { icon }).addTo(map)
    .bindPopup(`<b>${s.name}</b><br>${s.status}<br><small>${s.source}</small>`, { maxWidth:200 });
    markers[s.name] = marker;
});
window.filterMap = () => {
    const zone = document.getElementById('zoneFilter').value;
    Object.values(markers).forEach(m => m.removeFrom(map));
    js.ships.filter(s => zone === 'all' || s.zone === zone).forEach(s => {
        L.marker([s.lat, s.lng], { icon: icons[s.type] || icons.DDG }).addTo(map)
        .bindPopup(`<b>${s.name}</b><br>${s.status}`);
    });
};

// СПИСОК КОРАБЛЕЙ
const list = document.getElementById('ships-list');
js.ships.forEach(s => {
    const relClass = s.reliability;
    const relText = s.reliability === 'confirmed' ? 'Confirmed' : 'Unknown';
    const impactClass = s.israel_impact.includes('Высокий') ? 'impact-high' : s.israel_impact.includes('Средний') ? 'impact-medium' : 'impact-low';
    list.innerHTML += `
        <div class="ship-card">
            <div style="display:flex;justify-content:space-between;align-items:center;">
                <h3>${s.name} <small>(${s.type})</small></h3>
                <span class="reliability ${relClass}">${relText}</span>
            </div>
            <p><strong>Статус:</strong> ${s.status} | <strong>Зона:</strong> ${s.zone}</p>
            <p><strong>Роль:</strong> ${s.role}</p>
            <p><strong>Влияние на Израиль:</strong> <span class="${impactClass}">${s.israel_impact}</span></p>
            <p><strong>Вооружение:</strong> ${s.weapons}</p>
            ${s.specops ? `<p><strong>Спецназ:</strong> ${s.specops}</p>` : ''}
            <p style="font-size:0.75rem;color:#94a3b8;">Источник: ${s.source} | Пинг: ${s.last_ping || '—'}</p>
        </div>
    `;
});

/* ---------- Обновление без перезагрузки ---------- */
async function updateData() {
    try {
        await fetch('fetch_navy.php?' + Date.now());
        const r = await fetch('navy_cache.json?' + Date.now());
        const data = await r.json();

        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('csg-count').textContent = data.analysis.csg_count;
        document.getElementById('ddg-count').textContent = data.analysis.ddg_count;
        document.getElementById('ssgn-count').textContent = data.analysis.ssgn_count;

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

        markers = {};
        map.invalidateSize();
        Object.values(markers).forEach(m => m.removeFrom(map));
        data.ships.forEach(s => {
            const icon = icons[s.type] || icons.DDG;
            const marker = L.marker([s.lat, s.lng], { icon }).addTo(map)
            .bindPopup(`<b>${s.name}</b><br>${s.status}<br><small>${s.source}</small>`, { maxWidth:200 });
            markers[s.name] = marker;
        });

        const list = document.getElementById('ships-list');
        list.innerHTML = '';
        data.ships.forEach(s => {
            const relClass = s.reliability;
            const relText = s.reliability === 'confirmed' ? 'Confirmed' : 'Unknown';
            const impactClass = s.israel_impact.includes('Высокий') ? 'impact-high' : s.israel_impact.includes('Средний') ? 'impact-medium' : 'impact-low';
            list.innerHTML += `
                <div class="ship-card">
                    <div style="display:flex;justify-content:space-between;align-items:center;">
                        <h3>${s.name} <small>(${s.type})</small></h3>
                        <span class="reliability ${relClass}">${relText}</span>
                    </div>
                    <p><strong>Статус:</strong> ${s.status} | <strong>Зона:</strong> ${s.zone}</p>
                    <p><strong>Роль:</strong> ${s.role}</p>
                    <p><strong>Влияние на Израиль:</strong> <span class="${impactClass}">${s.israel_impact}</span></p>
                    <p><strong>Вооружение:</strong> ${s.weapons}</p>
                    ${s.specops ? `<p><strong>Спецназ:</strong> ${s.specops}</p>` : ''}
                    <p style="font-size:0.75rem;color:#94a3b8;">Источник: ${s.source} | Пинг: ${s.last_ping || '—'}</p>
                </div>
            `;
        });

        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(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>