# План реалізації повільного режиму та налаштувань хостів

Цей план описує впровадження "повільного" режиму пінгування (раз на хвилину) та можливість індивідуального налаштування кожного хоста через графічний інтерфейс.

## 1. Огляд змін
- Додавання поняття "Режим пінгування" (Fast/Slow) до моделі даних.
- Оновлення фонового завдання пінгування для підтримки різних інтервалів та джитера.
- Автоматичне визначення режиму при додаванні нового хоста (Fast для локальних IP, Slow для зовнішніх).
- Додавання кнопки налаштувань (шестірні) для кожного хоста та діалогового вікна для зміни режиму.

## 2. Зміни в архітектурі

### Модель (`src/model/status.rs`, `src/model/app_state.rs`)
- Впровадження перерахування `PingMode`:
    - `Fast`: 1 секунда (типово для LAN).
    - `Slow`: 60 секунд ± 10% джитера (типово для WAN).
- Додавання поля `mode: PingMode` до структури `HostInfo`.
- Реалізація логіки перевірки, чи є адреса локальною (Private IP ranges).

### Логіка пінгування (`src/logic/pinger.rs`)
- Рефакторинг `pinger_task`:
    - Перехід від єдиного `tokio::time::interval` до циклу, що перевіряє час останнього пінгу для кожного хоста.
    - Додавання випадкового відхилення (jitter) для `Slow` режиму, щоб уникнути синхронізації пакетів.
    - Зберігання стану таймерів у окремій структурі всередині таска.

### Інтерфейс (`src/main.rs`)
- Додавання стану `editing_host: Option<String>` до структури `EguiPinger` для відстеження відкритого діалогу налаштувань.
- Оновлення `ui_layout`:
    - Додавання іконки шестірні ⚙️ поруч з кнопкою видалення.
    - Реалізація `ui_host_settings` (модальне вікно або `Window` для редагування).
- Оновлення логіки додавання хоста для автоматичного встановлення `PingMode`.

## 3. Етапи реалізації

### Етап 1: Модель даних
- [ ] Додати `PingMode` до `src/model/status.rs`.
- [ ] Оновити `HostInfo`, додавши поле `mode`.
- [ ] Реалізувати функцію `is_local_address(addr: &str) -> bool`.

### Етап 2: Рефакторинг пінгера
- [ ] Змінити логіку `pinger_task` на таку, що враховує `mode` кожного хоста.
- [ ] Додати обробку джитера для великих інтервалів.
- [ ] Забезпечити коректне оновлення інтервалів при зміні налаштувань "на льоту".

### Етап 3: Користувацький інтерфейс
- [ ] Додати іконку ⚙️ до рядка хоста.
- [ ] Реалізувати діалогове вікно налаштувань хоста.
- [ ] Додати перемикач режимів (Fast/Slow) у діалозі.
- [ ] Перевірити автоматичне призначення режиму при натисканні "Add".

## 4. Критерії успіху
- Хости з локальними IP (наприклад, 192.168.1.1) отримують режим `Fast` за замовчуванням.
- Хости з зовнішніми адресами (наприклад, 8.8.8.8) отримують режим `Slow` за замовчуванням.
- Пінгування в режимі `Slow` відбувається приблизно раз на хвилину.
- Координати вікна, вибрані теми та режими пінгування зберігаються після перезапуску.
- Користувач може вручну змінити режим для будь-якого хоста через вікно налаштувань.
