# Complete este programa como pedido no guião da aula.

def listContacts(dic):
    """Print the contents of the dictionary as a table, one item per row."""
    print("{:>12s} : {:^35s} : {:<12s}".format("Numero", "Nome", "Morada"))
    for num in dic:
        print("{:>12s} : {:^35s} : {:<12s}".format(num, dic[num][0], dic[num][1]))


def addContact(dic):
    name = input("Nome: ")
    number = input("Número: ")
    address = input("Morada: ")
    dic[number] = (name, address)


def removeContact(dic):
    number = input("Número: ")
    del dic[number]


def searchContact(dic):
    number = input("Número: ")
    print(f"""Nome: {dic[number][0] if number in dic else number}
Morada: {dic[number][1] if number in dic else '----'}""")


def filterPartName(contacts, partName):
    """Returns a new dict with the contacts whose names contain partName."""
    newDict = {}
    for num in contacts:
        if partName in contacts[num]:
            newDict[num] = contacts[num]
    return newDict


def menu():
    """Shows the menu and gets user option."""
    print()
    print("(L)istar contactos")
    print("(A)dicionar contacto")
    print("(R)emover contacto")
    print("Procurar (N)úmero")
    print("Procurar (P)arte do nome")
    print("(T)erminar")
    op = input("opção? ").upper()  # converts to uppercase...
    return op


def main():
    """This is the main function containing the main loop."""

    # The list of contacts (it's actually a dictionary!):
    contactos = {"234370200": ("Universidade de Aveiro", "Campus de Santiago"),
                 "727392822": ("Cristiano Aveiro", "Casa"),
                 "387719992": ("Maria Matos", "Rua da Matos, 123"),
                 "887555987": ("Marta Maia", "Rua da Maia, 123"),
                 "876111333": ("Carlos Martins", "Rua dos Martins, 123"),
                 "433162999": ("Ana Bacalhau", "Rua do Bacalhau, 123"),
                 }

    op = ""
    while op != "T":
        op = menu()
        if op == "T":
            print("Fim")
        elif op == "L":
            print("Contactos:")
            listContacts(contactos)
        elif op == "A":
            print("Novo contacto:")
            addContact(contactos)
        elif op == "R":
            print("Remover contacto:")
            removeContact(contactos)
        elif op == "N":
            print("Procurar número:")
            searchContact(contactos)
        elif op == "P":
            print("Procurar parte do nome:")
            partName = input("Parte do nome: ")
            newDict = filterPartName(contactos, partName)
            listContacts(newDict)
        else:
            print("Não implementado!")


# O programa começa aqui
main()