def __init__(self):
     self.dicionario = Dicionario()
     self.tesauro = Tesauro()
class Aplicacao:
    def __init__(self):
        self.dicionario = Dicionario()
        self.tesauro = Tesauro()

    def executar(self):
        try:
            while 1:
                self.menu()
        except (KeyboardInterrupt, EOFError):
            # Interrupção pelo usuário (ctrl+c)
            self.encerrar()

    def menu(self):
        """ Menu inicial da aplicação """
        while 1:
            print "===== T1 ORI ========"
            print "Selecione a operação:"
            print "(1) Dicionário"
            print "(2) Tesauro"
            print "(3) Sair"
            try:
                opcao = int(raw_input("Operação: "))
                if opcao in [1,2,3]:
                    break
                else:
                    raise ValueError
            except ValueError:
                print "Operação não reconhecida"
        if opcao == 1:
            # Dicionário
            self.menu_dicionario()
        elif opcao == 2:
            # Tesauro
            self.menu_tesauro()
        else:
            # Sair
            self.encerrar()

    def menu_dicionario(self):
        """ Menu das operações sob o dicionário """
        while 1:
            while 1:
                print "===== Dicionário ====="
                print "Selecione a operação:"
                print "(1) Buscar uma palavra"
                print "(2) Adicionar uma palavra"
                print "(3) Adicionar um significado para uma palavra"
                print "(4) Remover uma palavra"
                print "(5) Menu anterior"
                try:
                    opcao = int(raw_input("Operação: "))
                    if opcao in [1,2,3,4,5]:
                        break
                    else:
                        raise ValueError
                except ValueError:
                    print "Operação não reconhecida"
            if opcao == 1:
                # Buscar
                print "Digite a palavra que deseja pesquisar"
                palavra = raw_input("Palavra: ")
                self.dicionario.buscar(palavra)
            elif opcao == 2:
                # Adicionar palavra
                print "Digite a palavra que deseja adicionar"
                palavra = raw_input("Palavra: ")
                self.dicionario.inserir(palavra)
            elif opcao == 3:
                # Adicionar significado
                print "Digite a palavra a qual se deseja adicionar um significado"
                palavra = raw_input("Palavra: ")
                print "Digite o significado"
                significado = raw_input("Significado: ")
                self.dicionario.inserir_significado(palavra, significado)
            elif opcao == 4:
                # Remover palavra
                print "Digite a palavra que deseja remover"
                palavra = raw_input("Palavra: ")
                self.dicionario.remover(palavra)
            else:
                break
            raw_input("Pressione <ENTER> para continuar...")

    def menu_tesauro(self):
        """ Menu das operações sob o tesauro """
        while 1:
            while 1:
                print "===== Tesauro ========"
                print "Selecione a operação:"
                print "(1) Buscar uma palavra"
                print "(2) Adicionar uma palavra"
                print "(3) Adicionar um termo para uma palavra"
                print "(4) Remover uma palavra"
                print "(5) Menu anterior"
                try:
                    opcao = int(raw_input("Operação: "))
                    if opcao in [1,2,3,4,5]:
                        break
                    else:
                        raise ValueError
                except ValueError:
                    print "Operação não reconhecida"
            if opcao == 1:
                # Buscar
                print "Digite a palavra que deseja pesquisar"
                palavra = raw_input("Palavra: ")
                self.tesauro.buscar(palavra)
            elif opcao == 2:
                # Adicionar palavra
                print "Digite a palavra que deseja adicionar"
                palavra = raw_input("Palavra: ")
                self.tesauro.inserir(palavra)
            elif opcao == 3:
                # Adicionar termo
                self.menu_tesauro_termo()
            elif opcao == 4:
                # Remover palavra
                print "Digite a palavra que deseja remover"
                palavra = raw_input("Palavra: ")
                self.tesauro.remover(palavra)
            else:
                break
            raw_input("Pressione <ENTER> para continuar...")

    def menu_tesauro_termo(self):
        """ Menu de inserção de termo ao tesauro """
        print "Digite a palavra a qual se deseja adicionar um termo"
        palavra = raw_input("Palavra: ")

        while 1:
            print "Tipo do termo que será inserido:"
            print "(1) Sinônimo"
            print "(2) Termo contrastante"
            print "(3) Termo relacionado"
            try:
                opcao = int(raw_input("Tipo: "))
                if opcao in [1,2,3]:
                    break
                else:
                    raise ValueError
            except ValueError:
                print "Tipo não reconhecido"

        print "Digite o termo (palavra ou frase)"
        termo = raw_input("Termo: ")

        if opcao == 1:
            # Sinônimo
            self.tesauro.inserir_frase(palavra, termo, 's')
        elif opcao == 2:
            # Termo contrastante
            self.tesauro.inserir_frase(palavra, termo, 'c')
        else:
            # Termo relacionado
            self.tesauro.inserir_frase(palavra, termo, 'r')

    def encerrar(self):
        """ Rotina de cleanup da aplicação """
        print "\nEncerrando a aplicação..."
        self.dicionario.salvar()
        self.tesauro.salvar()
        sys.exit(1)