# -*- coding: latin-1 -*-
import time
import random
from PySide import QtCore

from Constantes import *
from Traducir import tr

import XMotorRespuesta

import MotorInterno

#-----------------------------------------------------------------------------------------------------
class GestorMotor :
    def __init__( self, clave, gestor ) :

        self.procesador = gestor.procesador
        self.xtutor = gestor.xtutor
        self.clave = clave
        self.autor = ""
        self.version = ""
        self.siUCI = False
        self.siTutor = False
        self.siDebug = False
        self.exe = ""
        self.motorProfundidad = None
        self.motorTiempoJugada = None

        self.ml = MotorInterno.MotorInterno()
        dic = { kMP_1 : ( self.ml.mp1, "RIVAL_1", 7 ),
                kMP_2 : ( self.ml.mp2, "RIVAL_2", 6 ),
                kMP_3 : ( self.ml.mp3, "RIVAL_3", 5 ),
                kMP_4 : ( self.ml.mp4, "RIVAL_4", 4 ),
                kMP_5 : ( self.ml.mp5, "RIVAL_5", 3 ),
                kMP_6 : ( self.ml.mp6, "RIVAL_6", 2 ),
                kMP_7 : ( self.ml.mp7, "RIVAL_7", 0 ),
            }

        self.funcion, txt, self.jugadasTutor = dic[clave]
        self.nombre = tr( txt )
        self.numJugada = 0

        self.siListo = clave == kMP_7
        if self.siListo :
            self.siJuegaTutor = False
            self.rmComparar = XMotorRespuesta.RespuestaMotor( "listo" )
            self.rmComparar.mate = 0
            self.rmComparar.puntos = -80

    def debug( self, txt ) :
        self.siDebug = True
        self.nomDebug = self.nombre + "-" + txt

    # -----------------------------------------------------------------------------------------
    def juega( self ) :
        fen = self.procesador.gestor.partida.fenActual()

        if self.jugadasTutor == 0 :
            siTutor = self.siJuegaTutor
            mrm = self.xtutor.control(fen, 3)
            rm = mrm.liMultiPV[0]
            self.siJuegaTutor = self.rmComparar.siMejorQue( rm, 0, 0 )
        else :
            self.numJugada += 1
            siTutor = self.numJugada%self.jugadasTutor == 0

        if siTutor :
            mrm = self.xtutor.control(fen, 3)

        else :
            pv = self.funcion( fen )
            mrm = XMotorRespuesta.MRespuestaMotor( "interno" )
            mrm.dispatch( "bestmove " + pv, None, None )

        return mrm.liMultiPV[0]

    # -----------------------------------------------------------------------------------------
    def juegaTiempo( self, tiempoBlancas, tiempoNegras, segundosJugada, nAjustado=0 ) :
        t = tiempoBlancas if self.procesador.gestor.partida.siBlancas() else tiempoNegras
        mx = int(t*5/300)
        li = [ 1,1,1,1,1,1,2,2,2,2,2,3,3,3,4]
        if mx > 0 :
            for x in range(mx) :
                li.extend( [x+1]*(mx-x) )
        t = random.choice(li)
        for x in range(t*2) :
            QtCore.QCoreApplication.processEvents(QtCore.QEventLoop.ExcludeUserInputEvents)
            time.sleep( 0.5 )
        return self.juega()

