# Bot.md

## Prostředí
- Bot: Jihusbot (@Jihus_Bot), Telegram
- Stack: PHP + MariaDB na WP LXC (192.168.169.80)
- URL webhooku: https://bot.jihus.eu/api/webhook_bot.php (bez Basic Auth, zabezpečeno secret tokenem)
- DocumentRoot: /var/www/bot
- Databáze: bot_db, uživatel bot_user
- Config: /var/www/config/bot.php (BOT_TOKEN, WEBHOOK_SECRET, WHITELIST_CHAT_ID, DB_*)
- Chat ID (whitelist, single-user): 566592827
- Log příchozích updatů: /var/log/bot/updates.log (mimo webroot, vlastník www-data)

## Architektura
- Single-user bot, whitelist na chat_id (cizí chat_id se ignoruje bez odpovědi)
- Router kombinuje: 1) aktivní bot_sessions (rozjetý dialog) → 2) explicitní příkaz (/ingress...) → 3) detekce podle obsahu zprávy
- bot_sessions: stav rozehraného dialogu per (chat_id, process) – state + context (JSON)
- Každý proces = vlastní podadresář processes/<nazev>/

## Databázové tabulky
- `bot_sessions` – id, chat_id, process, state, context (JSON), updated_at
- `ingress_imports` – id, imported_at, exported_at (z Date+Time dat), raw_text, backup_file, note
- `ingress_stat_values` – import_id (FK), stat_key, stat_value (long/EAV formát – viz key_learnings)
- `ingress_stat_keys` – stat_key (PK), unit (nullable), first_seen_at (registr známých klíčů, detekce nových statistik)

## Ingress proces (Fáze 1 – v přípravě)
- Vstup: text zkopírovaný z Ingress Agent Stats (export), 60 sloupců tab-separated (header + 1 řádek hodnot)
- Zpracování: parsing → detekce neznámých klíčů proti ingress_stat_keys → zápis do ingress_imports/ingress_stat_values
- Backup vstupních dat: WebDAV PUT na Nextcloud, cesta /Backups/Ingress/ingress_<exported_at>.txt,
  autorizace přes dedikované App Password (ne hlavní heslo účtu), automaticky při každém importu
- Postup: a) založení bota ✅, b) ověření čtení zpráv ✅, c) parsing bez zápisu do DB (rozpracováno),
  d) zápis do DB, e) další funkce (výběr záznamu k porovnání, přehled, rozdíly)

## Klíčové poznámky
- long/EAV formát (ingress_stat_values) zvolen kvůli proměnlivosti Ingress statistik v čase
  (nové položky nevyžadují ALTER TABLE) a generickým JOIN dotazům pro výpočet rozdílů
- ingress_stat_keys.unit sloučen do registru klíčů namísto samostatné tabulky (1:1 vztah, ne 1:N)
- exported_at (z dat) je klíčové pro porovnávání záznamů; imported_at jen informativní
- WP LXC a Nextcloud LXC nesdílí filesystem → zápis backupu výhradně přes WebDAV, ne přímý mount
