# TODO: egui_pinger

## 🟢 Виконано (MVP Core)
- [x] Реалізувати базовий механізм ICMP пінгів з використанням `surge-ping`.
- [x] Підтримка моніторингу декількох серверів одночасно.
- [x] Реалізувати обчислення тремтіння (jitter) за експериментальними алгоритмами (T3, T21 та T99).
- [x] Додати візуалізацію історії затримок у вигляді гістограм (Sparklines).
- [x] Забезпечити збереження списку хостів між сеансами (Persistence).
- [x] Реалізувати режим «Зупинено» (Stopped) для окремих хостів з очищенням статистики та журналу.

## 🟠 Тестування та Рефакторинг (Quality Assurance)
- [x] **Відокремлення логіки від UI (Варіант 1 з Research)**:
    - [x] Винести логіку розрахунку метрик (jitter, mean, loss) в окремий доменний модуль.
    - [x] Рефакторинг `AppState` та `pinger_task` для можливості тестування без GUI.
    - [x] Написати Unit-тести для `HostStatus` (коректність розрахунку експериментального Jitter T3/T21/T99).
- [x] **Інтеграційне тестування GUI (Варіант 2 з Research)**:
    - [x] Додати `egui_kittest` до `dev-dependencies`.
    - [x] Реалізувати тести сценаріїв: "Додавання хоста", "Видалення хоста", "Валідація полів введення".
    - [x] Перевірити автоматичну зміну кольорів статусу залежно від латентності (RTT > 100ms).

## 🟡 В процесі / Найближчі плани (Phase 2)
- [x] **Локалізація та I18n**:
    - [x] Налаштувати інфраструктуру Gettext (.po/.mo файли).
    - [x] Перевести всі тексти інтерфейсу на англійську мову.
    - [x] Перекласти інтерфейс на українську мову засобами Gettext.
- [x] **Інтелектуальні режими роботи**:
    - [x] Реалізувати перемикач режимів через ComboBox (від 1с до 5хв).
    - [x] Додати алгоритм випадкових затримок (pattern jittering) для маскування трафіку (±10% для всіх режимів).
    - [x] Налаштувати різні інтервали для локальних та віддалених сервісів у повільному режимі.
- [x] **Стандартний RTP Jitter (RFC 3550)**:
    - [x] Реалізувати алгоритм фільтрації та обчислення джиттера згідно промислового стандарту RFC 3550 (пріоритетно).
    - [x] Додати нову метрику в структуру `HostStatus`.
- [ ] **Розширені методи перевірки та маскування**:
    - [x] Додати підтримку налаштування розміру пакета (Packet Padding) для кожного хоста окремо.
    - [x] Реалізувати режим "Випадкового розміру пакета" (Random Padding) для ускладнення аналізу метаданих.
    - [x] Забезпечити випадковий джиттер інтервалів (Jitter) для всіх режимів (VeryFast...VerySlow) для руйнування періодичності.
    - [x] **Підтримка IPv6 та стабільність пінгу**:
    - [x] Замінити `surge-ping` на `ping-async` для повноцінної підтримки IPv6.
    - [x] Забезпечити роботу на Windows без вимог прав адміністратора.
- [ ] Зробити випадковим вміст пінгів протягом певного часу, зі зміною вмісту після відсилання кожних 99 пінгів.


## 🔵 Платформена підтримка та полірування (Phase 4)
- [x] **UI/UX покращення**:
    - [x] Оновити кольорову схему та ліміти графіку:
        - [x] Темносірий ліміт висотою 150 мс, який видно постійно.
        - [x] Жовтий колір для затримок > 150 мс.
        - [x] Фіолетовий колір для затримок > 300 мс.
        - [x] Червоний стовпчик висотою 150 мс для втрачених пакетів.
    - [x] Оптимізувати розміри графіків (заповнення без порожнеч при 99 пінгах).
    - [x] Додати темну/світлу теми оформлення (автоматично за системою).
    - [x] Реалізувати перестановку рядків за допомогою Drag & Drop (`egui::DragAndDrop`).
    - [x] Покращити тултіпи графіків (відображення затримки замість координат x/y).
    - [x] **Персоналізація відображення (Column Customization)**:
        - [x] Додати в `HostInfo` налаштування видимості метрик для кожного хоста.
        - [x] Оновити вікно налаштувань (⚙️) для вибору параметрів:
            - [x] Основне: Назва, адреса.
            - [x] Латентність: Поточний пінг, середній (Mean), медіана (Median), P95, StdDev, Min/Max.
            - [x] Надійність: % втрат, лічильник Sent/Lost.
            - [x] Тремтіння: RTP Jitter (Поточний, Середній, Медіанний), Експериментальні (T3, T21, T99).
        - [x] Реалізувати динамічну генерацію тексту рядка на основі обраного набору полів (скорочені мітки: С, Мд, Т, Тс, Тм, СВ, 95%, м/М).
    - [x] **Розширена аналітика та якість зв'язку**:
        - [x] Реалізувати оцінку якості голосу MOS (Mean Opinion Score).
        - [x] Додати показник доступності (Availability %).
        - [x] Виявлення аномалій (Outliers) — пінгів з відхиленням > 3*StdDev.
        - [x] Коригування розрахунків (MOS, Jitter, Outliers) для розрахунку в межах "ковзного вікна" (300).

## 🟣 Трасування та автоматична діагностика (Phase 5)
- [x] **Реалізація Traceroute**:
    - [x] Розробити кросплатформений парсер виводу `traceroute` (Linux) та `tracert` (Windows).
    - [x] Додати модульні тести для парсингу різних форматів та локалей.
    - [x] Реалізувати періодичне оновлення маршруту для кожного хоста.
- [x] **Інтелектуальна діагностика обривів**:
    - [x] Реалізувати алгоритм "Hop-by-Hop" пінгування при втраті зв'язку з цільовим хостом.
    - [x] Додати визначення та відображення `failure_point` (точки обриву).
- [x] **UI для Traceroute**:
    - [x] Додати кнопку відображення маршруту в списку хостів.
    - [x] Реалізувати візуальну індикацію вузла, на якому стався обрив.
- [x] **Покращення надійності діагностики (Phase 5.1)**:
    - [x] Додати таймштамп свіжості даних `last_updated` до `HostStatus`.
    - [x] Перенести оновлення `alive` у `add_sample()` для атомності.
    - [x] Паралелізувати DNS-розв'язку та створення ICMP requestor'ів (`tokio::spawn`).
    - [x] Інвалідувати кеш ICMP requestor'ів при помилках мережі.
    - [x] Виявлення "Local Interface" при обриві першого хопа (шлюз).
    - [x] Ігнорувати застарілі дані у failure deduction (> 15с).
    - [x] Невідомі хопи не вважати "broken" у failure deduction.
    - [x] Перезапуск traceroute при зміні стану хоста (alive → down).
    - [x] Тайм-аут 30с для процесу traceroute, `-w 2` для хопів.
87: 
88: ## 📋 Журналювання та події (Phase 6)
89: - [x] **Реалізація Журналу подій (Journaling)**:
90:     - [x] Типізований буфер `LogEntry` на 100 000 подій у пам'яті.
91:     - [x] Автоматичне журналювання: Пінги, Таймаути, Статистика (кожні 300), Зміни маршруту, Інциденти.
92:     - [x] Повна локалізація записів журналу (i18n).
93: - [x] **Запис у файл**:
94:     - [x] Можливість увімкнення "Append to file" для окремих хостів.
95:     - [x] Налаштування шляху до файлу журналювання.
96:     - [x] Маркування початку та кінця запису.
97: - [x] **UI Журналу**:
98:     - [x] Віртуалізоване вікно перегляду з фільтрами за типом подій.
99:     - [x] Кольорове виділення різних типів записів.
100:     - [x] Автоматична прокрутка донизу (Stick-to-bottom).

## 🔧 Системні інструменти (Phase 7)
- [ ] **Вікно системної діагностики (System Tools)**:
    - [ ] Окремий модуль `src/ui/system_tools.rs`.
    - [ ] Набір команд для Linux (`ip addr`, `ss`, `dig`, `nmcli` тощо) та Windows (`ipconfig`, `netstat`, `nslookup` тощо).
    - [ ] Покроковий довідник із діагностики мережевих проблем.
    - [ ] ComboBox для вибору команди з описом.
    - [ ] Асинхронний запуск команд без блокування UI.
    - [ ] Повна локалізація (EN + UK).

## 🛠️ Консольна утиліта (CLI Utility)
- [x] **Розробка `mos`**:
    - [x] Створити окремий клейт для CLI-утиліти.
    - [x] Реалізувати парсинг стандартного виводу команди `ping`.
    - [x] Забезпечити розрахунок усіх метрик (jitter, MOS, p95) ідентично до GUI версії.
    - [x] Додати підтримку аргументів командного рядка для налаштування виводу та розміру вікна.
    - [x] Написати інтеграційні тести для перевірки коректності розрахунків на реальних даних.

