# Lezione 18 - Esercizio 1
# Scrivere un programma Python che legga il file "database_biologico.txt"
# e memorizzi le informazioni in un dizionario in cui la chiave è il nome
# della specie e il valore è il valore della caratteristiche.
# Fornisci un menu all'utente per eseguire le seguenti operazioni:
# - Se l’utente inserisce il numero 1, si visualizzano tutte le specie e
#   le caratteristiche
# - Se l’utente inserisce il numero 2, si ottieni il valore di caratteristiche
#   per una specie (all’utente sarà successivamente chiesto di inserire quale
#   specie valutare la caratteristica).
# Queste operazioni devono essere effettuate fintanto che l’user non richieda
# di uscire e scriva “3”.

def leggi_database(percorso_file: str) -> dict[str, int]:
    """
    Legge il file e memorizza le informazioni in esso contenute in un dizionario.

    :param percorso_file: Il percorso del file da leggere
    :return: Il dizionario con il nome della specie come chiave e caratteristica come valore
    """
    database = {}
    file = open(percorso_file, 'r')
    righe = file.readlines()  # righe = ["Lupo 100", "Orca 800", "Elefante 300"]
    file.close()
    for riga in righe:
        elementi_nella_riga = riga.split(" ")  # elementi_nella_riga = ["Lupo", "100"]
        specie = elementi_nella_riga[0]
        caratteristica = elementi_nella_riga[1]
        # specie, caratteristica = riga.split(" ")  # riga.split(" ") = ["Lupo", "100"]
        database[specie] = int(caratteristica)
    
    return database

def menu(database: dict[str, int]) -> None:
    """
    Fornisce un menu all'utente per interagire con il database biologico.
    """
    while True:
        print("\nMenu:")
        print("1. Visualizza tutte le specie e le caratteristiche")
        print("2. Ottieni il valore di caratteristica per una specie")
        print("3. Esci")

        scelta = input("Inserisci la tua scelta: ")

        if scelta == '1':
            stampa_dizionario_in_modo_bello(database)
        elif scelta == '2':
            specie = input("Inserisci il nome della specie di cui visualizzare il valore di Caratteristica1: ").strip()
            if specie.capitalize() in database:
                print(f"La caratteristica di {specie} è: {database[specie.capitalize()]}")
            else:
                print("Specie non trovata nel database")
        elif scelta == '3':
            print("Ciao ciao")
            break
        else:
            print("Scelta non valida. Riprova")

def stampa_dizionario_in_modo_bello(dizionario: dict) -> None:
    """
    Funzione che stampa un dizionario come una lista puntata

    :param dizionario: il dizionario da stampare
    """
    for chiave, valore in dizionario.items():
        print(f" - {chiave}: {valore}")

def main() -> None:
    """
    Programma principale.
    """
    percorso_database = "database_biologico.txt"
    database = leggi_database(percorso_database)

    if database:
        menu(database)
    else:
        print("C'è stato un errore nella lettura del file, oppure il file è vuoto.")

if __name__ == "__main__":
    main()