import unittest
import pandas as pd
from Funcoes_Axiliares import Funcoes_Axiliares
import sys, os
sys.path.insert(-1,os.path.abspath('../../../Pyker'))
from cientista.Validar import Regra_bord

class Regra_bord_test(unittest.TestCase,Funcoes_Axiliares):

    def test_validar(self):
        print('------------ validar -----------------\n'
              'Primeiro verifica se a combinação de cartas na mesa esta deacordo com as recras \n'
              'e se a etapa atual e maior que a etapa anterior \n'
              '--------------------------------------')

        regra_bord = Regra_bord.Regra_bord()
        dataframe_bord = pd.DataFrame()
        regra_bord.iniciar(dataframe_bord)
        lista_telas_embaralhadas = self.retornar_lista_telas_embaralhadas(10, 3)
        for idx, tupla in enumerate(lista_telas_embaralhadas):
            dataframe_bord.loc[idx] = False
            novo_ficheiro = self.gerador_de_ficheiros(tupla[1])
            novo_ficheiro.setdefault('tela', tupla[0])
            for chave in novo_ficheiro:
                dataframe_bord.loc[idx, (chave)] = novo_ficheiro[chave]
            regra_bord.validar(idx)

        tela_1 = regra_bord.dataframe[regra_bord.dataframe['tela'] == 1].drop(['tela'], axis=1).to_string(index=False)
        tela_2 = regra_bord.dataframe[regra_bord.dataframe['tela'] == 2].drop(['tela'], axis=1).to_string(index=False)
        tela_3 = regra_bord.dataframe[regra_bord.dataframe['tela'] == 3].drop(['tela'], axis=1).to_string(index=False)


        self.assertEqual(tela_1, tela_2)
        self.assertEqual(tela_1, tela_3)
        self.assertEqual(tela_2, tela_3)

        dataframe = regra_bord.dataframe[regra_bord.dataframe['tela'] == 1].reset_index()

        self.assertEqual( dataframe.loc[0, ('valido_bord')] , False)
        self.assertEqual( dataframe.loc[1, ('valido_bord')] , True)
        self.assertEqual( dataframe.loc[2, ('valido_bord')] , False)
        self.assertEqual( dataframe.loc[3, ('valido_bord')] , False)
        self.assertEqual( dataframe.loc[4, ('valido_bord')] , False)
        self.assertEqual( dataframe.loc[5, ('valido_bord')] , True)
        self.assertEqual( dataframe.loc[6, ('valido_bord')] , False)
        self.assertEqual( dataframe.loc[7, ('valido_bord')] , True)
        self.assertEqual( dataframe.loc[8, ('valido_bord')] , False)
        self.assertEqual( dataframe.loc[9, ('valido_bord')] , True)



    def test_etapa(self):
        print('------------ etapa -----------------')
        regra_bord = Regra_bord.Regra_bord()
        dataframe_bord = pd.DataFrame()
        regra_bord.iniciar(dataframe_bord)
        for x in range(0, 10):
            dataframe_bord.loc[x] = False
            novo_ficheiro = self.gerador_de_ficheiros(x)
            for chave in novo_ficheiro:
                dataframe_bord.loc[x, (chave)] = novo_ficheiro[chave]
            print(regra_bord.etapa(x))

    def gerador_de_ficheiros(self, novo_ficheiro):

        if novo_ficheiro == 0:
            ficheiro = {'bord_FLOP_1': '', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '', 'bord_RIVER': '', 'bord_TURN': ''}
        elif novo_ficheiro == 1:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_RIVER': '',
                        'bord_TURN': ''}
        elif novo_ficheiro == 2:
            ficheiro = {'bord_FLOP_1': '', 'bord_FLOP_2': '', 'bord_FLOP_3': '', 'bord_RIVER': '2c', 'bord_TURN': ''}
        elif novo_ficheiro == 3:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_RIVER': '2c',
                        'bord_TURN': ''}
        elif novo_ficheiro == 4:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '', 'bord_FLOP_3': '2c', 'bord_RIVER': '2c',
                        'bord_TURN': ''}
        elif novo_ficheiro == 5:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_RIVER': '2c',
                        'bord_TURN': '2c'}
        elif novo_ficheiro == 6:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_TURN': '',
                        'bord_RIVER': ''}
        elif novo_ficheiro == 7:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_TURN': '2c',
                        'bord_RIVER': ''}
        elif novo_ficheiro == 8:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_TURN': '',
                        'bord_RIVER': ''}
        elif novo_ficheiro == 9:
            ficheiro = {'bord_FLOP_1': '2c', 'bord_FLOP_2': '2c', 'bord_FLOP_3': '2c', 'bord_TURN': '2c',
                        'bord_RIVER': '2c'}

        return ficheiro


if __name__ == "__main__":
    print('Teste da classe Regra aposta')
    unittest.main()