Komendy CLI
===========

Admini
-------
flask admins list
flask admins create <username> <password> [--admin/--user]
flask admins promote <username|id>
flask admins demote <username|id>
flask admins set-password <username|id> <password>

Opis:
- list: pokazuje wszystkich uzytkownikow wraz z ID i rola
- create: tworzy konto admina lub zwyklego uzytkownika
- promote: nadaje uprawnienia administratora
- demote: odbiera uprawnienia administratora
- set-password: ustawia nowe haslo dla wskazanego konta

Listy
-----
flask lists copy-schedule --source-list-id 12 --when "2026-03-20 18:30"
flask lists copy-schedule --source-list-id 12 --when "2026-03-20 18:30" --owner admin
flask lists copy-schedule --source-list-id 12 --when "2026-03-20 18:30" --title "Zakupy piatkowe"
flask lists move --list-id 12 --when "2026-03-21 09:00"
flask lists move --list-id 12 --when "2026-03-21 09:00" --keep-item-times --keep-expiry
flask lists archive --list-id 12
flask lists unarchive --list-id 12
flask lists assign-owner --list-id 12 --owner admin
flask lists create-from-template --template-id 5 --owner admin --when "2026-03-22 08:00"
flask lists create-from-template --template-id 5 --owner admin --title "Weekend"
flask lists delete --list-id 12
flask lists rename --list-id 12 --title "Nowa nazwa listy"
flask lists duplicate-many --source-list-id 12 --when-list "2026-03-23 08:00,2026-03-24 08:00,2026-03-25 08:00"
flask lists duplicate-many --source-list-id 12 --when-list "2026-03-23 08:00,2026-03-24 08:00" --owner admin --title-prefix "Sklep"

Zasady dzialania
----------------
- copy-schedule tworzy nowa liste na podstawie istniejacej
- copy-schedule kopiuje pozycje i przypisane kategorie
- copy-schedule ustawia nowy created_at na wartosc z parametru --when
- gdy lista byla tymczasowa i miala expires_at, termin wygasniecia jest przesuwany o ten sam odstep czasu
- wydatki i paragony nie sa kopiowane
- move przenosi istniejaca liste na wskazany dzien/godzine
- move domyslnie przesuwa rowniez czasy pozycji i expires_at o ten sam offset czasu
- move z opcja --keep-item-times zostawia added_at i purchased_at bez zmian
- move z opcja --keep-expiry zostawia expires_at bez zmian
- archive oznacza liste jako archiwalna
- unarchive przywraca liste z archiwum
- assign-owner zmienia wlasciciela listy
- create-from-template tworzy nowa liste z szablonu dla wskazanego wlasciciela
- create-from-template bez --when ustawia biezacy czas UTC
- delete usuwa liste wraz z powiazanymi pozycjami, historią i paragonami zaleznymi od relacji bazy
- rename zmienia tytul listy
- duplicate-many tworzy wiele kopii tej samej listy dla wielu terminow przekazanych w --when-list
- duplicate-many opcjonalnie pozwala zmienic wlasciciela i nadac prefiks nazwy nowym listom

SZABLONY I HISTORIA:
- Historia zmian listy jest widoczna w widoku listy wlasciciela.
- Szablon mozna utworzyc z panelu admina lub z poziomu listy wlasciciela.
- Admin moze szybko utworzyc liste z szablonu i zduplikowac liste jednym kliknieciem.
- Operacje CLI takie jak copy-schedule, move, archive, unarchive, assign-owner, rename i create-from-template sa zapisywane w historii listy.
