from biblioteka import Biblioteka, Konfiguracja
from datetime import datetime


def menu_pracownicy(biblioteka: Biblioteka):
    while True:
        print("\n--- PRACOWNICY ---")
        print("1. Dodaj pracownika")
        print("2. Usuń pracownika")
        print("3. Modyfikuj pracownika")
        print("4. Lista pracowników")
        print("0. Powrót")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            imie = input("Imię: ")
            nazwisko = input("Nazwisko: ")
            stanowisko = input("Stanowisko: ")
            data = input("Data zatrudnienia (YYYY-MM-DD): ")
            pesel = input("PESEL: ")
            telefon = input("Telefon: ")
            biblioteka.dodaj_pracownika(imie, nazwisko, stanowisko, data, pesel, telefon)
            print("Dodano pracownika!")
        
        elif wybor == "2":
            id_p = int(input("ID pracownika do usunięcia: "))
            if biblioteka.usun_pracownika(id_p):
                print("Usunięto pracownika!")
            else:
                print("Nie znaleziono pracownika!")
        
        elif wybor == "3":
            id_p = int(input("ID pracownika do modyfikacji: "))
            print("Podaj nowe dane (ENTER aby pominąć):")
            imie = input("Imię: ")
            nazw = input("Nazwisko: ")
            stan = input("Stanowisko: ")
            akt = {}
            if imie: akt['imie'] = imie
            if nazw: akt['nazwisko'] = nazw
            if stan: akt['stanowisko'] = stan
            if biblioteka.modyfikuj_pracownika(id_p, **akt):
                print("Zmodyfikowano!")
            else:
                print("Nie znaleziono!")
        
        elif wybor == "4":
            print("\nLista pracowników:")
            for p in biblioteka.pracownicy:
                print(f"  {p.id_pracownika}: {p.pelne_dane} - {p.stanowisko}")
        
        elif wybor == "0":
            break


def menu_czytelnicy(biblioteka: Biblioteka):
    while True:
        print("\n--- CZYTELNICY ---")
        print("1. Dodaj czytelnika")
        print("2. Usuń czytelnika")
        print("3. Modyfikuj czytelnika")
        print("4. Lista czytelników")
        print("0. Powrót")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            imie = input("Imię: ")
            nazwisko = input("Nazwisko: ")
            adres = input("Adres: ")
            telefon = input("Telefon: ")
            email = input("Email: ")
            biblioteka.dodaj_czytelnika(imie, nazwisko, adres, telefon, email)
            print("Dodano czytelnika!")
        
        elif wybor == "2":
            id_c = int(input("ID czytelnika do usunięcia: "))
            if biblioteka.usun_czytelnika(id_c):
                print("Usunięto czytelnika!")
            else:
                print("Nie można usunąć - ma wypożyczone lub zarezerwowane pozycje!")
        
        elif wybor == "3":
            id_c = int(input("ID czytelnika do modyfikacji: "))
            print("Podaj nowe dane (ENTER aby pominąć):")
            imie = input("Imię: ")
            nazw = input("Nazwisko: ")
            adr = input("Adres: ")
            tel = input("Telefon: ")
            mail = input("Email: ")
            akt = {}
            if imie: akt['imie'] = imie
            if nazw: akt['nazwisko'] = nazw
            if adr: akt['adres'] = adr
            if tel: akt['telefon'] = tel
            if mail: akt['email'] = mail
            if biblioteka.modyfikuj_czytelnika(id_c, **akt):
                print("Zmodyfikowano!")
            else:
                print("Nie znaleziono!")
        
        elif wybor == "4":
            print("\nLista czytelników:")
            for c in biblioteka.czytelnicy:
                print(f"  {c.id_czytelnika}: {c.pelne_dane} ({c.ilosc_wypozyczonych} wyp.)")
        
        elif wybor == "0":
            break


def menu_pozycje(biblioteka: Biblioteka):
    while True:
        print("\n--- POZYCJE ---")
        print("1. Dodaj książkę")
        print("2. Dodaj CD")
        print("3. Dodaj DVD")
        print("4. Dodaj kasetę")
        print("5. Dodaj dziennik")
        print("6. Dodaj tygodnik")
        print("7. Dodaj miesięcznik")
        print("8. Dodaj grę planszową")
        print("9. Dodaj zasoby cyfrowe")
        print("10. Usuń pozycję")
        print("11. Lista pozycji")
        print("0. Powrót")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            tytul = input("Tytuł: ")
            autor = input("Autor: ")
            wydawnictwo = input("Wydawnictwo: ")
            data_wyd = input("Data wydania: ")
            isbn = input("ISBN: ")
            kod = input("Kod biblioteczny: ")
            biblioteka.dodaj_ksiazke(tytul, autor, wydawnictwo, data_wyd, isbn, kod)
            print("Dodano książkę!")
        
        elif wybor == "2":
            tytul = input("Tytuł: ")
            wykonawca = input("Wykonawca: ")
            rok = int(input("Rok: "))
            kod = input("Kod biblioteczny: ")
            biblioteka.dodaj_cd(tytul, wykonawca, rok, kod)
            print("Dodano CD!")
        
        elif wybor == "3":
            tytul = input("Tytuł: ")
            rezyser = input("Reżyser: ")
            rok = int(input("Rok: "))
            kod = input("Kod biblioteczny: ")
            biblioteka.dodaj_dvd(tytul, rezyser, rok, kod)
            print("Dodano DVD!")
        
        elif wybor == "4":
            tytul = input("Tytuł: ")
            wykonawca = input("Wykonawca: ")
            rok = int(input("Rok: "))
            kod = input("Kod biblioteczny: ")
            biblioteka.dodaj_kasete(tytul, wykonawca, rok, kod)
            print("Dodano kasetę!")
        
        elif wybor == "5":
            tytul = input("Tytuł: ")
            kod = input("Kod biblioteczny: ")
            data = input("Data wydania: ")
            biblioteka.dodaj_dziennik(tytul, kod, data)
            print("Dodano dziennik!")
        
        elif wybor == "6":
            tytul = input("Tytuł: ")
            kod = input("Kod biblioteczny: ")
            numer = int(input("Numer: "))
            rok = int(input("Rok: "))
            biblioteka.dodaj_tygodnik(tytul, kod, numer, rok)
            print("Dodano tygodnik!")
        
        elif wybor == "7":
            tytul = input("Tytuł: ")
            kod = input("Kod biblioteczny: ")
            numer = int(input("Numer: "))
            rok = int(input("Rok: "))
            biblioteka.dodaj_miesiecznik(tytul, kod, numer, rok)
            print("Dodano miesięcznik!")
        
        elif wybor == "8":
            tytul = input("Tytuł: ")
            kod = input("Kod biblioteczny: ")
            wydawca = input("Wydawca: ")
            min_g = int(input("Min graczy: "))
            max_g = int(input("Max graczy: "))
            biblioteka.dodaj_gre_planszowa(tytul, kod, wydawca, min_g, max_g)
            print("Dodano grę planszową!")
        
        elif wybor == "9":
            tytul = input("Tytuł: ")
            kod = input("Kod biblioteczny: ")
            fmt = input("Format: ")
            rozm = int(input("Rozmiar (MB): "))
            biblioteka.dodaj_zasoby_cyfrowe(tytul, kod, fmt, rozm)
            print("Dodano zasoby cyfrowe!")
        
        elif wybor == "10":
            kod = input("Kod biblioteczny do usunięcia: ")
            if biblioteka.usun_pozycje(kod):
                print("Usunięto pozycję!")
            else:
                print("Nie można usunąć - pozycja jest wypożyczona lub nie istnieje!")
        
        elif wybor == "11":
            print("\nLista pozycji:")
            for p in biblioteka.pozycje:
                print(f"  {p.kod_biblioteczny}: {p.get_typ()} - {p.tytul} [{p.sprawdz_status()}]")
        
        elif wybor == "0":
            break


def menu_wypozyczenia(biblioteka: Biblioteka):
    while True:
        print("\n--- WYPOŻYCZENIA I REZERWACJE ---")
        print("1. Wypożycz pozycję")
        print("2. Oddaj pozycję")
        print("3. Zarezerwuj pozycję")
        print("4. Anuluj rezerwację")
        print("5. Kontrola wypożyczeń")
        print("0. Powrót")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            id_c = int(input("ID czytelnika: "))
            kod = input("Kod pozycji: ")
            print(biblioteka.wypozycz(id_c, kod))
        
        elif wybor == "2":
            kod = input("Kod pozycji do oddania: ")
            print(biblioteka.oddaj(kod))
        
        elif wybor == "3":
            id_c = int(input("ID czytelnika: "))
            kod = input("Kod pozycji do rezerwacji: ")
            print(biblioteka.zarezerwuj(id_c, kod))
        
        elif wybor == "4":
            id_c = int(input("ID czytelnika: "))
            kod = input("Kod pozycji: ")
            print(biblioteka.anuluj_rezerwacje(id_c, kod))
        
        elif wybor == "5":
            wynik = biblioteka.kontrola_wypozyczen()
            print("\n--- KONTROLA WYPOŻYCZEŃ ---")
            print(f"Wypożyczone: {len(wynik['wypozyczone'])}")
            for w in wynik['wypozyczone']:
                print(f"  - {w['pozycja']} -> {w['czytelnik']} [{w['status']}]")
            print(f"\nZarezerwowane: {len(wynik['zarezerwowane'])}")
            for w in wynik['zarezerwowane']:
                print(f"  - {w['pozycja']} -> {w['czytelnik']}")
            print(f"\nPRZETRZYMANE: {len(wynik['przetrzymane'])}")
            for w in wynik['przetrzymane']:
                print(f"  - {w['pozycja']} -> {w['czytelnik']}")
        
        elif wybor == "0":
            break


def menu_konfiguracja():
    while True:
        print("\n--- KONFIGURACJA ---")
        print(f"1. Max wypożyczeń: {Konfiguracja.max_wypozyczenia}")
        print(f"2. Dni wypożyczenia: {Konfiguracja.dni_wypozyczenia}")
        print(f"3. Dni rezerwacji: {Konfiguracja.dni_rezerwacji}")
        print("0. Powrót")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            Konfiguracja.ustaw_limit(int(input("Nowy limit: ")))
        elif wybor == "2":
            Konfiguracja.ustaw_dni_wypozyczenia(int(input("Nowa liczba dni: ")))
        elif wybor == "3":
            Konfiguracja.ustaw_dni_rezerwacji(int(input("Nowa liczba dni: ")))
        elif wybor == "0":
            break


def menu_pliki(biblioteka: Biblioteka):
    while True:
        print("\n--- PLIKI ---")
        print("1. Zapisz wszystko do JSON")
        print("2. Wczytaj wszystko z JSON")
        print("3. Zapisz pozycje (osobno)")
        print("4. Wczytaj pozycje (osobno)")
        print("5. Zapisz czytelników (osobno)")
        print("6. Wczytaj czytelników (osobno)")
        print("7. Zapisz pracowników (osobno)")
        print("8. Wczytaj pracowników (osobno)")
        print("9. Zapisz wypożyczenia (osobno)")
        print("10. Wczytaj wypożyczenia (osobno)")
        print("0. Powrót")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            print(biblioteka.zapisz_json())
        elif wybor == "2":
            print(biblioteka.wczytaj_json())
        elif wybor == "3":
            print(biblioteka.zapisz_pozycje())
        elif wybor == "4":
            print(biblioteka.wczytaj_pozycje())
        elif wybor == "5":
            print(biblioteka.zapisz_czytelnikow())
        elif wybor == "6":
            print(biblioteka.wczytaj_czytelnikow())
        elif wybor == "7":
            print(biblioteka.zapisz_pracownikow())
        elif wybor == "8":
            print(biblioteka.wczytaj_pracownikow())
        elif wybor == "9":
            print(biblioteka.zapisz_wypozyczenia())
        elif wybor == "10":
            print(biblioteka.wczytaj_wypozyczenia())
        elif wybor == "0":
            break


def main():
    biblioteka = Biblioteka()
    
    print("Witaj w systemie biblioteki!")
    
    while True:
        print("\n=== MENU GŁÓWNE ===")
        print("1. Pracownicy")
        print("2. Czytelnicy")
        print("3. Pozycje")
        print("4. Wypożyczenia i rezerwacje")
        print("5. Konfiguracja")
        print("6. Pliki (zapis/odczyt)")
        print("7. Raport")
        print("0. Wyjście")
        
        wybor = input("Wybierz: ")
        
        if wybor == "1":
            menu_pracownicy(biblioteka)
        elif wybor == "2":
            menu_czytelnicy(biblioteka)
        elif wybor == "3":
            menu_pozycje(biblioteka)
        elif wybor == "4":
            menu_wypozyczenia(biblioteka)
        elif wybor == "5":
            menu_konfiguracja()
        elif wybor == "6":
            menu_pliki(biblioteka)
        elif wybor == "7":
            print(biblioteka.generuj_raport())
        elif wybor == "0":
            print("Do widzenia!")
            break


if __name__ == "__main__":
    main()