class AbstractNacaoBuilder(NacaoBuilder):

    nacao = None
    fabricaOfensores = None
    fabricaDefensores = None

    def criarNacao(self, nome):

        self.nacao = Nacao()
        self.nacao.setNome(nome)

    def fazerDefensores(self, listDefensores):

        num = len(listDefensores)
        cont = 0
        dados = []
        listDefensoresProntos = []

        while cont < num:

            dados = listDefensores[cont]

            defensor = self.fabricaDefensores.criarGuerreiro(dados[0], dados[1], dados[2], dados[3])
            listDefensoresProntos.append(defensor)
            cont+=1

        self.nacao.setDefensores(listDefensoresProntos)

    def fazerOfensores(self, listOfensores):

        num = len(listOfensores)
        cont = 0
        dados = []
        listOfensoresProntos = []

        while cont < num:

            dados = listOfensores[cont]
            ofensor = self.fabricaOfensores.criarGuerreiro(dados[0], dados[1], dados[2], dados[3])
            listOfensoresProntos.append(ofensor)
            cont+=1

        self.nacao.setOfensores(listOfensoresProntos)


    def getNacao(self):
        return self.nacao
    def verificarLutar(self):

        nacaoAtacante = Nacao()
        nacaoDefensora = Nacao()

        resultado = 0

        nacaoAtacante.setNome('China\n')
        nacaoDefensora.setNome('Japao\n')
        ofensorAtaque = [(Chunku('paulo',24,66))]
        OfensorDefesa = [(MangaldeDefesa('Matheus',24,66))]
        nacaoAtacante.setOfensores(ofensorAtaque)
        nacaoAtacante.setDefensores(OfensorDefesa)

        defensorAtaque = [(Samurai('Gustavao',24,66))]
        defensorDefesa = [(TanTan('paulo',24,66))]

        nacaoDefensora.setOfensores(defensorAtaque)
        nacaoDefensora.setDefensores(defensorDefesa)

        batalha = Batalha()
        batalha.setParamentros(nacaoAtacante,nacaoDefensora)
        batalha.lutar()

        if nacaoAtacante.sizeDefensores() == resultado or nacaoDefensora.sizeDefensores() == resultado:
            print 'True'
    def verificar_nacao_atacante(self):
        nacaoAtacante = Nacao()
        nacaoDefensora = Nacao()

        resultado = 'paulo'

        nacaoAtacante.setNome('China\n')
        nacaoDefensora.setNome('Japao\n')
        ofensorAtaque = [(Chunku('paulo',24,66)), (Chunku('alberto',30,20))]
        OfensorDefesa = [(MangaldeDefesa('Matheus',24,66)), (MangaldeDefesa('Viadins',30,20))]
        nacaoAtacante.setOfensores(ofensorAtaque)
        nacaoAtacante.setDefensores(OfensorDefesa)

        defensorAtaque = [(Samurai('Gustavao',24,66)), (Samurai('Otario',30,20))]
        defensorDefesa = [(TanTan('paulo',24,66)), (TanTan('alberto',30,20))]

        nacaoDefensora.setOfensores(defensorAtaque)
        nacaoDefensora.setDefensores(defensorDefesa)

        batalha = Batalha()
        batalha.setParamentros(nacaoAtacante,nacaoDefensora)

        if batalha.ofensor.getNome() == resultado:
            print 'True'
    def criarNacao(self, nome):

        self.nacao = Nacao()
        self.nacao.setNome(nome)
class Batalha(object):

    __nacao1 = None
    __nacao2 = None


    def __init__(self):
        self.__nacao1 = Nacao()
        self.__nacao2 = Nacao()

    def carregar(self):

        daoNacao = DAONacao()

        self.__nacao1.setNome(daoNacao.leituraNome(daoNacao.getArquivo1()))
        self.__nacao2.setNome(daoNacao.leituraNome(daoNacao.getArquivo2()))

        self.__nacao1.setOfensores(daoNacao.leituraAtacantes(daoNacao.getArquivo1()))
        self.__nacao2.setOfensores(daoNacao.leituraAtacantes(daoNacao.getArquivo2()))

        self.__nacao1.setDefensores(daoNacao.leituraDefensores(daoNacao.getArquivo1()))
        self.__nacao2.setDefensores(daoNacao.leituraDefensores(daoNacao.getArquivo2()))




    def lutar(self):

        sorteio = randint(1,2)
        vezAtaque = None


        if sorteio == 1:
            vezAtaque = 1
        else:
            vezAtaque = 2

        while self.__nacao1.sizeOfensor()!= 0 and self.__nacao1.sizeDefensores()!=0 and self.__nacao2.sizeOfensor()!=0 and self.__nacao2.sizeDefensores()!=0:


            if vezAtaque == 1:

                nacaoAtaque = self.__nacao1
                nacaoDefesa = self.__nacao2
                ofensor = self.__nacao1.getLutador()
                ofensoresAtacantes = self.__nacao1.getOfensores()
                defensoresAtacantes = self.__nacao1.getDefensores()

                ofesoresDefesa = self.__nacao2.getOfensores()
                defensoresDefesa = self.__nacao2.getDefensores()
                defensor = self.__nacao2.getDefensor()

                proxAtaque = 2

            else:

                nacaoAtaque = self.__nacao2
                nacaoDefesa = self.__nacao1
                ofensor = self.__nacao2.getLutador()
                ofensoresAtacantes = self.__nacao2.getOfensores()
                defensoresAtacantes = self.__nacao2.getDefensores()

                ofesoresDefesa = self.__nacao1.getOfensores()
                defensoresDefesa = self.__nacao1.getDefensores()
                defensor = self.__nacao1.getDefensor()

                proxAtaque = 1


            while defensor.getEnergia()>0 and len(ofensoresAtacantes)>0:
                ofensor.atacar(defensor,ofensoresAtacantes,defensoresAtacantes,defensoresDefesa)
                defensor.defender(ofensor,defensoresDefesa,ofesoresDefesa,ofensoresAtacantes)

                print ofensor.getEnergia()

                if(ofensor.getEnergia()>0):
                    nacaoAtaque.adcionarOfensor(ofensor)
                    ofensor = None

                ofensor = nacaoAtaque.getLutador()

            vezAtaque = proxAtaque

    def gerarResultados(self):

        tela = TelaBatalha()
        empate = 0


        if self.__nacao1.sizeOfensor() == 0 and self.__nacao2.sizeDefensores() == 0 or self.__nacao2.sizeOfensor() == 0 and self.__nacao1.sizeDefensores() == 0:
            tela.menssagem("EMPATE - A PAZ REINOU")

            empate = 1


        if self.__nacao1.sizeOfensor() == 0 and empate == 0:

            tela.menssagem("A nacao vencedora foi %s" %self.__nacao2.getNome())
            tela.menssagem("A nacao perdedora foi %s" %self.__nacao1.getNome())
            tela.menssagem("Acabaram os guerreiros ofensores")

        if self.__nacao1.sizeDefensores() == 0 and empate == 0:
            tela.menssagem("A nacao vencedora foi: %s" %self.__nacao2.getNome())
            tela.menssagem("A nacao perdedora foi: %s"%self.__nacao1.getNome())
            tela.menssagem("Acabaram os guerreiro defensores")

        if self.__nacao2.sizeOfensor == 0 and empate == 0:
            tela.menssagem("A nacao vencedora foi: %s" %self.__nacao1.getNome())
            tela.menssagem("A nacao perdedora foi: %s"  %self.__nacao2.getNome())
            tela.menssagem("Acabaram os guerreiro ofensores")

        if self.__nacao2.sizeDefensores() == 0 and empate == 0:
            tela.menssagem("A nacao vencedora foi: %s" %self.__nacao1.getNome())
            tela.menssagem("A nacao perdedora foi: %s"  %self.__nacao2.getNome())
            tela.menssagem("Acabaram os guerreiro defensores")
 def __init__(self):
     self.__nacao1 = Nacao()
     self.__nacao2 = Nacao()