----- 2026-02-15 14:10:18 -----------------------------------------------------
**Úloha:** Vytvor CLI PHP skript `sftpsync2.php` na synchronizáciu cez SFTP. Skript musí používať triedu/vrstvu z `SFTPconnection.php` na pripojenie k SFTP (Secure FTP cez SSH). Neimplementuj pripojenie “od nuly”, iba ho používaj.

### 1) Požiadavky na CLI rozhranie

Skript musí spracovať argumenty z `argv` v štýle GNU:

**Povinné:**

* `--host <host>`
* `--user <user>`
* `--password <password>`

**Nepovinné:**

* `--port <port>` (default `22`)

**Opakovateľné akcie (môžu byť zadané viackrát, v ľubovoľnom poradí):**

* `--sync <local_dir> <remote_dir>`
  Synchronizácia **lokál → vzdialené** (upload).
* `--sync-down <remote_dir> <local_dir>`
  Synchronizácia **vzdialené → lokál** (download).
* `--delete <remote_file>`
  Zmaže vzdialený súbor.
* `--delete-dir <remote_dir>`
  Zmaže vzdialený adresár (rekurzívne).

**Pravidlo:** Minimálne jedna akcia musí byť zadaná, inak vypíš help a skonči chybou.

### 2) Pomoc a validácia

* `--help` alebo `-h` vypíše použitie + príklady.
* Validuj povinné parametre a formát vstupov.
* Pri chybe argumentov vráť exit code `2`.
* Pri zlyhaní pripojenia alebo SFTP operácie vráť exit code `1`.
* Pri úspechu `0`.

### 3) Poradie spracovania akcií

* Spracuj akcie **presne v poradí**, v akom boli zadané v CLI.
* Ak jedna akcia zlyhá, skonči a ďalšie už nespúšťaj (fail-fast), pokiaľ nie je explicitne uvedené inak.

### 4) Synchronizácia: špecifikácia správania

Pre `--sync` (upload) a `--sync-down` (download):

* Rekurzívne prechádzaj zdrojový adresár.
* Prenášaj súbory, ktoré:

  * neexistujú na cieli, alebo
  * majú odlišnú veľkosť, alebo
  * majú novší `mtime` na zdroji (ak sa dá zistiť na oboch stranách; ak nie, používaj veľkosť + checksum nie je povinný).
* Vytváraj chýbajúce adresáre na cieli.
* Zachovaj relatívnu štruktúru ciest.
* Loguj pre každý súbor jednu z akcií: `SKIP`, `UPLOAD`, `DOWNLOAD`, `MKDIR`, `DELETE`, `RMDIR`, `ERROR`.

**Poznámka:** Nevyžadujem “mirror delete” (mazanie súborov, ktoré nie sú na zdroji) — sync je iba kopírovanie/aktualizácia. Mazanie sa robí výlučne cez `--delete` a `--delete-dir`.

### 5) Mazanie

* `--delete <remote_file>`:

  * Skontroluj existenciu (ak sa dá); ak neexistuje, loguj `SKIP` a pokračuj.
* `--delete-dir <remote_dir>`:

  * Rekurzívne zmaž obsah (súbory aj podadresáre), potom samotný adresár.
  * Chráň sa pred nebezpečnými cestami: odmietni `""`, `/`, `.` a podobné “root-like” hodnoty (bezpečnostná poistka).

### 6) Integrácia so SFTPconnection.php

* Predpokladaj, že `SFTPconnection.php` poskytuje objekt na:

  * pripojenie (`connect()`),
  * upload/download súboru,
  * listovanie adresára,
  * vytváranie adresára,
  * zisťovanie `stat` (min. veľkosť a mtime ak dostupné),
  * mazanie súboru a adresára.
* Ak API nie je úplne jasné, sprav adaptér/obalové metódy v `sftpsync2.php`, ktoré volajú existujúce metódy a centralizujú rozdiely.

### 7) Kódové štandardy

* PHP 8+.
* Žiadne externé balíčky.
* Striktné typy (`declare(strict_types=1);`).
* Prehľadná štruktúra: parser argumentov, runner akcií, sync funkcie, pomocné utily (cesty, logovanie).
* Logovanie na STDOUT, chyby na STDERR.
* Jasné komentáre tam, kde je to neintuitívne.

### 8) Príklady použitia (musíš ich uviesť v help)

* Upload sync:

  * `php sftpsync2.php --host example.com --user u --password p --sync ./local /var/www`
* Download sync:

  * `php sftpsync2.php --host example.com --user u --password p --sync-down /var/backups ./backups`
* Viac akcií:

  * `php sftpsync2.php --host example.com --user u --password p --sync ./a /remote/a --delete /remote/a/old.zip --sync-down /remote/logs ./logs`
* Delete dir:

  * `php sftpsync2.php --host example.com --user u --password p --delete-dir /tmp/testdir`

**Výstup:** Vygeneruj kompletný obsah súboru `sftpsync2.php` (jeden súbor), pripravený na spustenie.
