# -*- coding: latin-1 -*-

import random
from PySide import QtCore, QtGui

from Code.Traducir import tr

import QTUtil2
import Colocacion
import Iconos
import Controles

# --------------------------------------------------------------------------------------------------------
def datos( wParent, configuracion, procesador ) :

    # Primero determinamos la categorķa
    resp = dameCategoria( wParent, configuracion, procesador )
    if resp :
        categoria = resp
    else :
        return None

    w = wDatos( wParent, categoria, configuracion )
    if w.exec_() :
        return categoria, w.nivel, w.siBlancas, w.puntos
    else :
        return None
# --------------------------------------------------------------------------------------------------------

# --------------------------------------------------------------------------------------------------------
def dameCategoria( wParent, configuracion, procesador ) :

    rival = configuracion.rival
    siModoCompetitivo = configuracion.siModoCompetitivo()

    menu = Controles.LMenu(puntos=10)

    menu.opcion( None, "%s : %s"%(tr("RIVAL"),rival.rotuloPuntos(siModoCompetitivo)))
    menu.separador()

    #---------- CATEGORIAS
    ant = 1
    for x in range(6) :
        cat = rival.categorias.numero(x)
        txt = cat.nombre()
        nm = cat.nivelHecho

        nh = cat.hecho

        if nm > 0 :
            txt += " %s %d"%(tr( "NIVEL" ), nm)
        if nh :
            if "B" in nh :
                txt += " +%s(%d)"%( tr( "PGN_WHITE" ),nm+1)
            if "N" in nh :
                txt += " +%s(%d)"%( tr( "PGN_BLACK" ),nm+1)

        siDesHabilitado = (ant == 0) and siModoCompetitivo
        ant = nm
        menu.opcion( str(x), txt, eval( "Iconos.%s()"%cat.color ), siDeshabilitado = siDesHabilitado)

    # ----------- RIVAL
    menu.separador()
    menuRival = menu.submenu( tr( "CAMBIAR_RIVAL" ) )

    puntuacion = configuracion.puntuacion()

    icoNo = Iconos.Motor_No()
    icoSi = Iconos.Motor_Si()
    icoActual = Iconos.Motor_Actual()
    grpNo = Iconos.Grupo_No()
    grpSi = Iconos.Grupo_Si()

    for grupo in configuracion.grupos.liGrupos :
        nombre = tr( "GRUPO", grupo.nombre )
        if grupo.minPuntos > 0 and siModoCompetitivo :
            nombre += " (+%d %s)"%(grupo.minPuntos, tr( "ABREV_PUNTOS" ) )

        siDes = (grupo.minPuntos > puntuacion) and siModoCompetitivo
        if siDes :
            icoG = grpNo
            icoM = icoNo
        else :
            icoG = grpSi
            icoM = icoSi
        submenu = menuRival.submenu( nombre, icoG )

        for rv in grupo.liRivales :
            siActual = rv.clave == rival.clave
            ico = icoActual if siActual else icoM
            submenu.opcion( "MT_" + rv.clave, rv.rotuloPuntos(siModoCompetitivo), ico, siDes or siActual )
        menuRival.separador()

    #------------ RESULTADO
    cursor = QtGui.QCursor.pos()
    resp = menu.lanza()
    if resp is None :
        return None
    elif resp.startswith( "MT_" ) :
        procesador.cambiaRival( resp[3:] )
        QtGui.QCursor.setPos(cursor)
        procesador.nuevaPartida()
        return None
    else :
        categoria = rival.categorias.numero( int(resp) )
        return categoria

# --------------------------------------------------------------------------------------------------------

# --------------------------------------------------------------------------------------------------------
class wDatos( QtGui.QDialog ):

    def __init__(self, wParent, categoria, configuracion )  :
        super(wDatos, self).__init__(wParent)

        self.setWindowTitle( tr( "NUEVA_PARTIDA" ) )
        self.setWindowIcon( Iconos.Datos() )
        self.setWindowFlags( QtCore.Qt.Dialog | QtCore.Qt.WindowTitleHint )

        tb = QTUtil2.creaTBAceptarCancelar( self )

        f = Controles.TipoLetra( puntos=12, peso=75 )
        flb = Controles.TipoLetra( puntos=10 )

        self.maxNivel, self.maxNivelHecho, self.maxPuntos = configuracion.maxNivelCategoria( categoria )
        # self.maxNivel = maxNivel = categoria.nivelHecho+1
        # self.maxNivelHecho = categoria.hecho
        # self.maxPuntos = categoria.maxPuntos()

        # if configuracion.siModoCompetitivo() :

        self.ed = Controles.SB( self.maxNivel, 1, self.maxNivel ).tamMaximo( 40 )
        lb = Controles.LB( categoria.nombre()+ " " + tr( "NIVEL" ) )

        lb.ponFuente( f )
        self.lbPuntos = Controles.LB( ).alinDerecha()
        self.connect( self.ed, QtCore.SIGNAL("valueChanged(int)"), self.nivelCambiado )

        siBlancas = not categoria.siHechoBlancas()
        self.rbBlancas = QtGui.QRadioButton( tr( "PGN_WHITE" ) )
        self.rbBlancas.setChecked( siBlancas )
        self.rbNegras = QtGui.QRadioButton( tr( "PGN_BLACK" ) )
        self.rbNegras.setChecked( not siBlancas )
        self.connect( self.rbBlancas, QtCore.SIGNAL("clicked()"), self.ponMaxPuntos )
        self.connect( self.rbNegras, QtCore.SIGNAL("clicked()"), self.ponMaxPuntos )

        # Rival
        rival = configuracion.rival
        lbRMotor = Controles.LB( "<b>%s</b> : %s" % ( tr( "MOTOR" ), rival.nombre )).ponFuente(flb).ponWrap().anchoFijo( 400 )
        lbRAutor = Controles.LB( "<b>%s</b> : %s" % ( tr( "AUTOR" ), rival.autor ) ).ponFuente(flb).ponWrap().anchoFijo( 400 )
        lbRWeb = Controles.LB( '<b>%s</b> : <a href="%s">%s</a>' % ( tr( "ABOUT_WEB" ), rival.url, rival.url ) ).ponWrap().anchoFijo( 400 ).ponFuente(flb)

        ly = Colocacion.V().control(lbRMotor).control(lbRAutor).control(lbRWeb).margen(10 )
        gbR = Controles.GB( self, tr( "RIVAL" ), ly ).ponFuente( f )

        # Tutor
        tutor = configuracion.tutor
        lbTMotor = Controles.LB( "<b>%s</b> : %s" % ( tr( "MOTOR" ), tutor.nombre )).ponFuente(flb).ponWrap().anchoFijo( 400 )
        lbTAutor = Controles.LB( "<b>%s</b> : %s" % ( tr( "AUTOR" ), tutor.autor ) ).ponFuente(flb).ponWrap().anchoFijo( 400 )
        lbTWeb = Controles.LB( '<b>%s</b> : <a href="%s">%s</a>' % ( "Web", tutor.url, tutor.url ) ).ponWrap().anchoFijo( 400 ).ponFuente(flb)

        ly = Colocacion.V().control(lbTMotor).control(lbTAutor).control(lbTWeb).margen(10 )
        gbT = Controles.GB( self, tr( "TUTOR" ), ly ).ponFuente( f )

        hbox = Colocacion.H().relleno(1).control(self.rbBlancas).espacio(10).control(self.rbNegras).relleno(1)
        gbColor = Controles.GB( self, tr( "JUGAMOS_CON" ), hbox ).ponFuente( f )

        lyNivel = Colocacion.H().control( lb ).control( self.ed ).espacio(10).control( self.lbPuntos ).relleno(1)

        vlayout = Colocacion.V().otro( lyNivel ).espacio(10).control(gbColor).espacio(10).control( gbR ).espacio(10).control( gbT ).margen( 30 )

        layout = Colocacion.V().control( tb ).otro( vlayout ).margen( 3 )

        self.setLayout( layout )

        self.ponMaxPuntos()

    def procesarTB( self ) :
        accion = self.sender().clave
        if accion == "aceptar" :
            self.nivel = self.ed.value()
            self.siBlancas = self.rbBlancas.isChecked()
            self.accept()
        elif accion == "cancelar" :
            self.reject()

    def nivelCambiado( self, nuevo ) :
        self.ponMaxPuntos()

    def ponMaxPuntos( self ) :
        p = 0
        if self.ed.value() >= self.maxNivel :
            color = "B" if self.rbBlancas.isChecked() else "N"
            if color not in self.maxNivelHecho :
                p = self.maxPuntos
        self.lbPuntos.setText( "%d %s"%(p, tr( "PUNTOS" ) ) )
        self.puntos = p
# ----------------------------------------------------------------------------------------------
def numEntrenamiento( wParent, titulo, hasta, etiqueta=None, pos=None, mensAdicional= None ) :

    w = WNumEntrenamiento( wParent, titulo, hasta, etiqueta, pos, mensAdicional )
    if w.exec_() :
        return w.numero
    else :
        return None

# ----------------------------------------------------------------------------------------------
class WNumEntrenamiento( QtGui.QDialog ):

    def __init__(self, wParent, titulo, hasta, etiqueta=None, pos = None, mensAdicional=None )  :
        super(WNumEntrenamiento, self).__init__(wParent)

        self.setWindowTitle( titulo )
        self.setWindowIcon( Iconos.Datos() )

        tb = QTUtil2.creaTBAceptarCancelar( self )

        if pos is None :
            pos = random.randint( 1, hasta )

        if etiqueta is None :
            etiqueta = tr( "NUMERO_ENTRENAMIENTO" )

        self.ed, lb = QTUtil2.spinBoxLB( pos, 1, hasta, etiqueta=etiqueta, maxTam = 60 )
        lb1 = Controles.LB( "/ %d"%hasta )

        if mensAdicional :
            lb2 = Controles.LB( mensAdicional )
            lb2.ponWrap().anchoMinimo(250)

        lyH = Colocacion.H().relleno(1).control( lb ).control( self.ed ).control( lb1 ).relleno(1).margen(15)

        lyV = Colocacion.V().control( tb ).otro( lyH )
        if mensAdicional :
            lyV.control(lb2)
        lyV.margen( 3 )

        self.setLayout( lyV )

        self.resultado = None

    def procesarTB( self ) :
        accion = self.sender().clave
        if accion == "aceptar" :
            self.numero = self.ed.value()
            self.accept()
        elif accion == "cancelar" :
            self.reject()

