# Lezione 17 - Esercizio 2 - Conteggio
# Crea un programma in Python che chiede all'utente di inserire una frase e conta
# quante volte e dove all'interno della stringa compaiono le vocali. Il programma
# deve stampare il conteggio totale di ogni vocale e la posizione di ogni occorrenza
# nella stringa.

def conta_vocali(frase: str) -> dict[str, dict[str, int|list]]:
    """
    Conta il numero di occorrenze delle vocali e registra le posizioni in cui compaiono.

    :param frase: stringa inserita dall'utente
    :return: dizionario con vocali come chiavi e dizionari (conteggio, posizioni) come valori
    """
    VOCALI = 'aeiouAEIOU'
    risultato = {}

    for vocale in VOCALI:
        risultato[vocale] = {
            'conteggio': 0,
            'posizioni': []
        }
    # Dopo questo for, si crea lo scheletro del dizionario, quindi una cosa del tipo:
    # risultato = {
    #   'a': {
    #       'conteggio': 0,
    #       'posizioni': []
    #   },
    #   'e': {
    #       'conteggio': 0,
    #       'posizioni': []
    #   },
    #
    #   ...
    #
    #   'U': {
    #       'conteggio': 0,
    #       'posizioni': []
    #   },
    # }

    for indice, carattere in enumerate(frase):
        if carattere in VOCALI:
            risultato[carattere]['conteggio'] += 1
            risultato[carattere]['posizioni'].append(indice)
    
    # Esempio di risultato finale:
    # risultato = {
    #   'a': {
    #       'conteggio': 7,
    #       'posizioni': [2, 4, 2, 1, 6, 7, 5]
    #   },
    #   'e': {
    #       'conteggio': 3,
    #       'posizioni': [2, 8, 1]
    #   },
    # }

    return risultato

def main():
    """
    Programma principale per analizzare vocali in una frase.
    """
    frase = input("Inserisci una frase: ")

    analisi = conta_vocali(frase)

    print("\n\nRisultati del conteggio delle vocali:")
    for vocale, informazioni in analisi.items():
        if informazioni['conteggio'] > 0:
            print(f"La vocale '{vocale}' è comparsa {informazioni['conteggio']} volte nelle posizioni: {informazioni['posizioni']}")
        else:
            print(f"La vocale '{vocale}' non è mai comparsa nella frase.")

if __name__ == "__main__":
    main()