# Lezione 17 - Esercizio 3 - Password
# Scrivi un programma in Python che chiede all'utente di inserire una password.
# La password è valida se ha almeno 8 caratteri, contiene almeno una lettera
# maiuscola, una lettera minuscola e un numero. Il programma deve stampare un
# messaggio che indica se la password è valida o meno.
import time

def valida_password(password: str) -> bool:
    """
    Verifica se una password è valida secondo i criteri:
     - Deve avere almeno 8 caratteri
     - Deve contenere almeno una lettera maiuscola
     - Deve contenere almeno una lettera minuscola
     - Deve contenere almeno un numero

    :param password: stringa contenente la password
    :return: True se la password è valida, False altrimenti
    """
    if len(password) < 8:
        return False
    
    ha_maiuscola = False
    ha_minuscola = False
    ha_numero = False

    for carattere in password: # 'Ciao1sium'
        print(f"CARATTERE IN ANALISI: {carattere}")
        
        if carattere.isupper():
            print("Il carattere è maiuscolo, imposto ha_maiuscola a True")
            ha_maiuscola = True # è true
        
        if carattere.islower():
            print("Il carattere è minuscolo, imposto ha_minuscola a True")
            ha_minuscola = True # è true
        
        if carattere.isdigit():
            print("Il carattere è un numero, imposto ha_numero a True")
            ha_numero = True # è true

        # Interrompiamo il ciclo appena tutti i criteri sono soddisfatti
        if ha_maiuscola and ha_minuscola and ha_numero:
            print("Tutti e tre i criteri sono stati rispettati, fermo la verifica e ritorno")
            break
        else:
            print(f"Maiuscola: {ha_maiuscola}, Minuscola: {ha_minuscola}, Numero: {ha_numero}")

        time.sleep(1)

    return ha_maiuscola and ha_minuscola and ha_numero

def main():
    """
    Programma principale per la validazione della password.
    """
    password = input("Inserisci una password: ")

    # is_password_valida = valida_password(password)

    if valida_password(password):
        print("La password è valida")
    else:
        print("La password NON è valida")

    # print(f"La funzione aveva restituito: {is_password_valida}")
    
if __name__ == "__main__":
    main()