#!/usr/bin/env python3
"""
Zadanie 5: Menadzer zadan (To-Do List)
Program do zarzadzania lista zadan z zapisem do pliku JSON.
"""

import json
import os
from datetime import datetime


PLIK_DANYCH = 'zadania.json'


def laduj_zadania():
    """Laduje zadania z pliku JSON."""
    if not os.path.exists(PLIK_DANYCH):
        return []
    try:
        with open(PLIK_DANYCH, 'r', encoding='utf-8') as f:
            return json.load(f)
    except (json.JSONDecodeError, IOError):
        return []


def zapisz_zadania(zadania):
    """Zapisuje zadania do pliku JSON."""
    with open(PLIK_DANYCH, 'w', encoding='utf-8') as f:
        json.dump(zadania, f, ensure_ascii=False, indent=2)


def dodaj_zadanie(zadania):
    """Dodaje nowe zadanie."""
    tytul = input("Tytul zadania: ").strip()
    if not tytul:
        print("Blad: Tytul nie moze byc pusty.")
        return
    
    opis = input("Opis (opcjonalnie): ").strip()
    
    zadanie = {
        'tytul': tytul,
        'opis': opis,
        'status': 'do_zrobienia',
        'data_utworzenia': datetime.now().strftime('%Y-%m-%d %H:%M')
    }
    zadania.append(zadanie)
    zapisz_zadania(zadania)
    print(f"Dodano zadanie: {tytul}")


def wyswietl_zadania(zadania):
    """Wyswietla liste zadan."""
    if not zadania:
        print("Brak zadan.")
        return
    
    print("\n" + "=" * 50)
    print("  LISTA ZADAN")
    print("=" * 50)
    
    for i, zad in enumerate(zadania, 1):
        status_emoji = "[X]" if zad['status'] == 'wykonane' else "[ ]"
        print(f"{i}. {status_emoji} {zad['tytul']}")
        if zad.get('opis'):
            print(f"   Opis: {zad['opis']}")
        print(f"   Status: {zad['status']}, Utworzone: {zad['data_utworzenia']}")
        print()


def oznacz_wykonane(zadania):
    """Oznacza zadanie jako wykonane."""
    if not zadania:
        print("Brak zadan.")
        return
    
    wyswietl_zadania(zadania)
    
    try:
        wybor = int(input("Numer zadania do oznaczenia jako wykonane: "))
        if 1 <= wybor <= len(zadania):
            zadania[wybor - 1]['status'] = 'wykonane'
            zapisz_zadania(zadania)
            print(f"Oznaczono zadanie jako wykonane.")
        else:
            print("Nieprawidlowy numer.")
    except ValueError:
        print("Blad: Wpisz liczbe.")


def usun_zadanie(zadania):
    """Usuwa zadanie."""
    if not zadania:
        print("Brak zadan.")
        return
    
    wyswietl_zadania(zadania)
    
    try:
        wybor = int(input("Numer zadania do usuniecia: "))
        if 1 <= wybor <= len(zadania):
            usuniete = zadania.pop(wybor - 1)
            zapisz_zadania(zadania)
            print(f"Usunieto zadanie: {usuniete['tytul']}")
        else:
            print("Nieprawidlowy numer.")
    except ValueError:
        print("Blad: Wpisz liczbe.")


def main():
    """Glowna funkcja programu."""
    zadania = laduj_zadania()
    
    while True:
        print("\n" + "=" * 40)
        print("  MENEDZER ZADAN")
        print("=" * 40)
        print("1 - Dodaj zadanie")
        print("2 - Wyswietl zadania")
        print("3 - Oznacz jako wykonane")
        print("4 - Usun zadanie")
        print("5 - Wyjscie")
        
        wybor = input("Wybierz opcje (1-5): ").strip()
        
        if wybor == '1':
            dodaj_zadanie(zadania)
        elif wybor == '2':
            wyswietl_zadania(zadania)
        elif wybor == '3':
            oznacz_wykonane(zadania)
        elif wybor == '4':
            usun_zadanie(zadania)
        elif wybor == '5':
            print("Do widzenia!")
            break
        else:
            print("Nieprawidlowa opcja.")


if __name__ == "__main__":
    main()