#IMPORTS
from Arbitro_Conecta_4 import Arbitro_Conecta_4
from Arbitro_Tres_En_Raya import Arbitro_Tres_En_Raya

"""
Clase de Capa de Comunicaciones.

Encargada de llamar a las funciones de Árbitro dependiendo 
de los mensajes recibidos del Servidor.
"""
class IntermediarioServidor:
     def __init__(self,respuesta):
        """
        Método que inicializa el Intermediario del Servidor.
        Se inicializan las variables.
        """
        self.cod = " "
        self.obj = None
        self.arbitro=self.inicializarArbitro(respuesta)

     def inicializarArbitro(self,respuesta):
        """
        Según la opción de juego que seleccione el Cliente, 1(Tres en Raya) o 2(Conecta 4, se inicializará el arbitro de un juego u otro.
        Siendo la respuesta el número de opción escogida, y por tanto, el juego seleccionado.

        Parámetros:
        respuesta -- Mensaje que contiene la opción de juego elegida por el CLiente(1-Tres en Raya y 2- Conecta 4)
        """
        if(respuesta=="1"):
            arbi=Arbitro_Tres_En_Raya(1,2) #Arbitro de Tres en Raya
        elif(respuesta=="2"):
            arbi=Arbitro_Conecta_4(1,2) #Arbitro de Conecta 4
        return arbi

     def arbitrar(self,msg,elem=None):
        """
        En función del mensaje recibido se realiza una cierta acción.

        Parámetros:
        msg -- Mensaje recibido del Cliente
        elem -- Objeto recibido del Cliente 

        Return:
        fin -- Código del mensaje a devolver en función de la acción realizada
        obj -- Objeto del mensaje a devolver en función de la acción realizada
        turno -- Turno actual
        """
        turno=self.arbitro.turnoActual()

        # Tablero pintado en InterfazJugador --> solicitarMov
        if(msg == "101"):
            self.cod = "203"
            self.obj = "0"

        # Solicitar tablero
        if(msg == "103"):
            self.cod= "202"
            self.obj = self.arbitro.dibujarTablero()

        # Movimiento a realizar
        if(msg == "104"):
            self.cod, self.obj = self.arbitro.realizarMovimiento(elem)
            if (self.cod):
                self.cod = "204"
            else:
                self.cod = "203"
                self.obj = "1"

        # Se ha realizado el movimiento y se ha actualizado el tablero 
        if(msg == '105'):
            self.obj = self.arbitro.esFin()
            
            if (self.cod == turno):
                self.cod = "200"
                self.obj = str(turno)  # Codigo fin ganando
            elif (cod == "0"):
                self.cod = "200"
                self.obj = "0"  # Codigo fin empate

            turno=self.arbitro.cambiarTurno()
            self.obj = self.arbitro.dibujarTablero()

        # Se devuelve el codigo de respuesta, el objeto y el turno
        return self.cod, self.obj, turno
#IMPORTS
from Arbitro_Conecta_4 import Arbitro_Conecta_4
from Arbitro_Tres_En_Raya import Arbitro_Tres_En_Raya

"""
Clase de Capa de Comunicaciones.

Encargada de llamar a las funciones de Árbitro dependiendo 
de los mensajes recibidos del Servidor.
"""
class IntermediarioServidor:
     def __init__(self,respuesta):
        """
        Método que inicializa el Intermediario del Servidor.
        Se inicializan las variables.
        """
        self.cod = " "
        self.obj = None
        self.arbitro=self.inicializarArbitro(respuesta)

     def inicializarArbitro(self,respuesta):
        """
        Según la opción de juego que seleccione el Cliente, 1(Tres en Raya) o 2(Conecta 4, se inicializará el arbitro de un juego u otro.
        Siendo la respuesta el número de opción escogida, y por tanto, el juego seleccionado.

        Parámetros:
        respuesta -- Mensaje que contiene la opción de juego elegida por el CLiente(1-Tres en Raya y 2- Conecta 4)
        """
        if(respuesta=="1"):
            arbi=Arbitro_Tres_En_Raya(1,2) #Arbitro de Tres en Raya
        elif(respuesta=="2"):
            arbi=Arbitro_Conecta_4(1,2) #Arbitro de Conecta 4
        return arbi

     def arbitrar(self,msg,elem=None):
        """
        En función del mensaje recibido se realiza una cierta acción.

        Parámetros:
        msg -- Mensaje recibido del Cliente
        elem -- Objeto recibido del Cliente 

        Return:
        fin -- Código del mensaje a devolver en función de la acción realizada
        obj -- Objeto del mensaje a devolver en función de la acción realizada
        turno -- Turno actual
        """
        turno=self.arbitro.turnoActual()

        # Tablero pintado en InterfazJugador --> solicitarMov
        if(msg == "101"):
            self.cod = "203"
            self.obj = "0"

        # Solicitar tablero
        if(msg == "103"):
            self.cod= "202"
            self.obj = self.arbitro.dibujarTablero()

        # Movimiento a realizar
        if(msg == "104"):
            self.cod, self.obj = self.arbitro.realizarMovimiento(elem)
            if (self.cod):
                self.cod = "204"
            else:
                self.cod = "203"
                self.obj = "1"

        # Se ha realizado el movimiento y se ha actualizado el tablero 
        if(msg == '105'):
            self.obj = self.arbitro.esFin()
            
            if (self.cod == turno):
                self.cod = "200"
                self.obj = str(turno)  # Codigo fin ganando
            elif (cod == "0"):
                self.cod = "200"
                self.obj = "0"  # Codigo fin empate

            turno=self.arbitro.cambiarTurno()
            self.obj = self.arbitro.dibujarTablero()

        # Se devuelve el codigo de respuesta, el objeto y el turno
        return self.cod, self.obj, turno
#IMPORTS Clase de Capa de Comunicaciones.  Encargada de llamar a las funciones de Árbitro dependiendo  de los mensajes recibidos del Servidor. Método que inicializa el Intermediario del Servidor.         Se inicializan las variables. Según la opción de juego que seleccione el Cliente, 1(Tres en Raya) o 2(Conecta 4, se inicializará el arbitro de un juego u otro.         Siendo la respuesta el número de opción escogida, y por tanto, el juego seleccionado.          Parámetros:         respuesta -- Mensaje que contiene la opción de juego elegida por el CLiente(1-Tres en Raya y 2- Conecta 4) #Arbitro de Tres en Raya #Arbitro de Conecta 4 En función del mensaje recibido se realiza una cierta acción.          Parámetros:         msg -- Mensaje recibido del Cliente         elem -- Objeto recibido del Cliente           Return:         fin -- Código del mensaje a devolver en función de la acción realizada         obj -- Objeto del mensaje a devolver en función de la acción realizada         turno -- Turno actual # Tablero pintado en InterfazJugador --> solicitarMov # Solicitar tablero # Movimiento a realizar # Se ha realizado el movimiento y se ha actualizado el tablero # Codigo fin ganando # Codigo fin empate # Se devuelve el codigo de respuesta, el objeto y el turno