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

from PySide import QtGui

from Code.Traducir import tr

import Colocacion
import Controles

#==========================================================================================================================================
class InformacionPGN( QtGui.QWidget ) :

    def __init__(self, wParent )  :
        QtGui.QWidget.__init__(self, wParent)

        self.wParent = wParent

        self.jg = None

        f = Controles.TipoLetra( puntos=10, peso=75 )
        ftxt = Controles.TipoLetra( nombre="Courier New", puntos=8 )

        self.lbApertura = Controles.LB( "" ).ponFuente(f).alinCentrado().ponColorFondoN( "#eeeeee", "#474d59" )
        self.lbApertura.hide()

        lbComentario = Controles.LB( tr( "COMENTARIO" ) ).ponFuente(f)
        self.comentario = Controles.EM( self, siHTML=False).capturaCambios( self.comentarioCambiado ).ponFuente(ftxt)
        lbVariantes = Controles.LB( tr( "VARIANTES" ) ).ponFuente(f)
        self.variantes = Controles.EM( self, siHTML=False ).capturaCambios( self.variantesCambiado ).ponFuente(ftxt)
        self.variantes.capturaDobleClick(self.variantesDobleClick)

        liOpciones = [("-","-")]
        for x in range(1, 140) :
            liOpciones.append( ("$%d : %s"%( x,tr("NAG_%d"%x)),str(x)) )
        self.valoracion = Controles.CB( liOpciones, "" ).ponAnchoMinimo().capturaCambiado( self, self.valoracionCambiada )
        lbValoracion = Controles.LB( tr( "VALORACION" ) ).ponFuente(f)

        layout = Colocacion.V()
        layout.control( self.lbApertura )
        layout.control( lbValoracion )
        layout.control( self.valoracion )
        layout.control( lbComentario )
        layout.control( self.comentario )
        layout.control( lbVariantes )
        layout.control( self.variantes )
        layout.margen( 5 )

        self.setLayout(layout)

    def ponJG( self, jg, apertura ) :
        self.jg = jg
        if jg :
            if jg.siApertura and apertura :
                self.lbApertura.ponTexto( apertura )
                self.lbApertura.show()
            else :
                self.lbApertura.hide()

            self.comentario.ponTexto( jg.comentario )
            self.variantes.ponTexto( jg.variantes )

            self.valoracion.ponValor( jg.critica if jg.critica else "-" )

        else :
            self.lbApertura.hide()

            self.comentario.ponTexto( "" )
            self.variantes.ponTexto( "" )
            self.valoracion.ponValor( "-" )

    def comentarioCambiado( self ) :
        if self.jg :
            self.jg.comentario = self.comentario.texto()

    def variantesCambiado( self ) :
        if self.jg :
            self.jg.variantes = self.variantes.texto()

    def valoracionCambiada( self, npos ) :
        if self.jg :
            critica = self.valoracion.resultado()
            self.jg.critica = critica if critica != "-" else ""

    def variantesDobleClick( self, event ) :
        txt = self.variantes.texto()
        pos = self.variantes.posicion()
        li = txt.replace( "\n\n", "\n" ).split( "\n" )
        n = 0
        lineaPGN = ""
        for linea in li :
            n += len(linea) + 1
            if pos < n :
                lineaPGN = linea
                break
        resp = self.editaVariante( lineaPGN ) # ------------------------------------------------VARIANTES
        if resp is not None :
            nuevaLinea, a1h8 = resp
            if lineaPGN :
                txt = txt.replace( lineaPGN, nuevaLinea )
            else :
                if li :
                    txt = txt.strip()
                    if txt :
                        txt += "\n\n"
                    txt += nuevaLinea
                else :
                    txt = nuevaLinea
            self.variantes.ponTexto( txt )
            self.variantesCambiado()

    #--------------------------------------------------------------------------------------------------------------------------------
    def editaVariante( self, linea ) :
        import Code.Variantes as Variantes
        gestor = self.wParent.gestor
        pos, jg = gestor.jugadaActiva()
        if jg is None :
            return None
        fen = jg.posicionBase.fen()

        return Variantes.editaVariante( gestor, fen, linea )

