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

#==========================================================================================================================================
from Code.Traducir import tr
from Code.Constantes import *

import QT.QTUtil2 as QTUtil2
import QT.Iconos as Iconos
import QT.Controles as Controles

import QT.FormLayout as FormLayout

#==========================================================================================================================================

class Personalidades :
    #--------------------------------------------------------------------------------------------------------------------------------
    def __init__( self, owner, configuracion ) :
        self.owner = owner
        self.configuracion = configuracion

    #--------------------------------------------------------------------------------------------------------------------------------
    def listaAjustes( self, siTodos ) :
        liAjustes = [
                (tr("AJUSTAR_RIVAL_MEJOR"),kAjustarMejor),
                (tr("AJUSTAR_RIVAL_SUPERIOR")+ "++",kAjustarSuperiorMM),
                (tr("AJUSTAR_RIVAL_SUPERIOR")+ "+",kAjustarSuperiorM),
                (tr("AJUSTAR_RIVAL_SUPERIOR"),kAjustarSuperior),
                (tr("AJUSTAR_RIVAL_SIMILAR"),kAjustarSimilar),
                (tr("AJUSTAR_RIVAL_INFERIOR"),kAjustarInferior),
                (tr("AJUSTAR_RIVAL_INFERIOR")+ "-",kAjustarInferiorM),
                (tr("AJUSTAR_RIVAL_INFERIOR")+ "--",kAjustarInferiorMM),
                (tr("AJUSTAR_RIVAL_PEOR"),kAjustarPeor),
                ("-"*30,None),
                (tr("AJUSTAR_RIVAL_NIVEL_ALTO"),kAjustarNivelAlto),
                (tr("AJUSTAR_RIVAL_NIVEL_MEDIO"),kAjustarNivelMedio),
                (tr("AJUSTAR_RIVAL_NIVEL_BAJO"),kAjustarNivelBajo),
            ]
        if siTodos and self.configuracion.liPersonalidades :
            liAjustes.append( ("-"*30, None) )
            for num,una in enumerate(self.configuracion.liPersonalidades) :
                liAjustes.append( ( una["NOMBRE"], 1000+num ) )
        return liAjustes

    #--------------------------------------------------------------------------------------------------------------------------------
    def editar( self, una, icono ) :
        if una is None :
            una = {}

        # Datos básicos
        liGen = [ (None, None ) ]
        liGen.append( ( FormLayout.Editbox( tr( "PERSON_NOMBRE" ) ), una.get( "NOMBRE", "" ) ) )

        liGen.append( (None, None ) )

        config = FormLayout.Fichero( tr( "FICHERODEBUG" ), "txt", True )
        liGen.append( ( config, una.get( "DEBUG", "" ) ))

        liGen.append( (None, None ) )

        liGen.append( ( None, tr("ERRORES_GRAVES") ) )
        liGen.append( ( FormLayout.Editbox( tr( "SELECCIONA_MATE" ), tipo=int, ancho=50 ), una.get( "MAXMATE", 0 ) ) )
        liGen.append( ( FormLayout.Editbox( tr( "SELECCIONA_MEJOR" ), tipo=int, ancho=50 ), una.get( "MINDIFPUNTOS", 0 ) ) )
        liGen.append( (None, None ) )
        liGen.append( ( FormLayout.Editbox( tr( "ATERRIZAJE" ), tipo=int, ancho=50 ), una.get( "ATERRIZAJE", 50 ) ) )

        # Apertura
        liA = [ (None, None ) ]

        config = FormLayout.Fichero( tr( "LIBROS_POLYGLOT" ), "bin", False )
        liA.append( ( config, una.get( "BOOK", "" )) )

        # Medio juego
        liMJ = [ (None, None ) ]

        ## Ajustar
        liMJ.append( ( FormLayout.Combobox( tr( "PERSON_BASE" ), self.listaAjustes(False) ), una.get( "AJUSTAR", kAjustarMejor ) ) )

        ## Movimiento siguiente
        liMJ.append( ( None, tr("PERSON_SIGUIENTE") ) )

        listaSG = [ "MOVERPEON", "AVANZARPIEZA", "JAQUE", "CAPTURAR" ]
        for opcion in listaSG :
            liMJ.append( ( FormLayout.Editbox( tr( "PERSON_"+opcion ), tipo=int, ancho=50 ), una.get( opcion, 0 ) ) )

        ## Movimientos previstos
        liMJ.append( ( None, tr("PERSON_PREVISTO") ) )
        listaPR = [ "2B", "AVANZAR", "JAQUE", "CAPTURAR" ]
        for opcion in listaPR :
            liMJ.append( ( FormLayout.Editbox( tr( "PERSON_"+opcion ), tipo=int, ancho=50 ), una.get( opcion+"PR", 0 ) ) )

        # Final
        liF = [ (None, None ) ]

        ## Ajustar
        liF.append( ( FormLayout.Combobox( tr( "PERSON_BASE" ), self.listaAjustes(False) ), una.get( "AJUSTARFINAL", kAjustarMejor ) ) )

        liF.append( ( FormLayout.Editbox( tr( "MAXPIEZASFINAL" ), tipo=int, ancho=50 ), una.get( "MAXPIEZASFINAL", 0 ) ) )
        liF.append( (None, None ) )

        ## Movimiento siguiente
        liF.append( ( None, tr("PERSON_SIGUIENTE") ) )
        for opcion in listaSG :
            liF.append( ( FormLayout.Editbox( tr( "PERSON_"+opcion ), tipo=int, ancho=50 ), una.get( opcion+"F", 0 ) ) )

        ## Movimientos previstos
        liF.append( ( None, tr("PERSON_PREVISTO") ) )
        for opcion in listaPR :
            liF.append( ( FormLayout.Editbox( tr( "PERSON_"+opcion ), tipo=int, ancho=50 ), una.get( opcion+"PRF", 0 ) ) )

        while True :
            lista = []
            lista.append( (liGen,tr( "PERSON_BASICO" ),"" ) )
            lista.append( (liA,tr( "PGN_OPENING" ),"" ) )
            lista.append( (liMJ,tr( "MEDIOJUEGO" ),"" ) )
            lista.append( (liF,tr( "FINALJUEGO" ),"" ) )
            resultado = FormLayout.fedit( lista, title= tr( "PERSONALIDADES" ), parent = self.owner, anchoMinimo = 460, icon = icono, siDefecto = False )
            if resultado :
                accion, liResp = resultado
                liGenR, liAR, liMJR, liFR = liResp

                nombre = liGenR[0].strip()

                if not nombre :
                    QTUtil2.mensError( self.owner, tr( "FALTA_NOMBRE" ) )
                    continue

                una = {}
                ## Base
                una["NOMBRE"] = nombre
                una["DEBUG"] = liGenR[1]
                una["MAXMATE"] = liGenR[2]
                una["MINDIFPUNTOS"] = liGenR[3]
                una["ATERRIZAJE"] = liGenR[4]

                ## Apertura
                una["BOOK"] = liAR[0]

                ## Medio
                una["AJUSTAR"] = liMJR[0]

                for num, opcion in enumerate(listaSG) :
                    una[opcion] = liMJR[num+1]

                nSG = len(listaSG)+1
                for num, opcion in enumerate(listaPR) :
                    una[opcion+"PR"] = liMJR[num+nSG]

                ## Final
                una["AJUSTARFINAL"] = liFR[0]
                una["MAXPIEZASFINAL"] = liFR[1]

                for num, opcion in enumerate(listaSG) :
                    una[opcion+"F"] = liFR[num+2]

                nSG = len(listaSG)+2
                for num, opcion in enumerate(listaPR) :
                    una[opcion+"PRF"] = liFR[num+nSG]

                return una

            return None

    #--------------------------------------------------------------------------------------------------------------------------------
    def lanzaMenu( self ) :
        menu = Controles.LMenu()
        f = Controles.TipoLetra( puntos=8, peso=75 )
        menu.ponFuente( f )
        icoCrear = Iconos.Mas()
        icoEditar = Iconos.ModificarP()
        icoBorrar = Iconos.Delete()
        icoVerde = Iconos.PuntoVerde()
        icoRojo = Iconos.PuntoNaranja()

        menu.opcion( ( "c", None ), tr( "PERSON_CREAR" ), icoCrear )

        liPersonalidades = self.configuracion.liPersonalidades
        if liPersonalidades :
            menu.separador()
            menuMod = menu.submenu( tr( "PERSON_EDITAR" ), icoEditar )
            for num, una in enumerate(liPersonalidades) :
                menuMod.opcion( ( "e", num ), una["NOMBRE"], icoVerde )
            menu.separador()
            menuBor = menu.submenu( tr( "PERSON_BORRAR" ), icoBorrar )
            for num, una in enumerate(liPersonalidades) :
                menuBor.opcion( ( "b", num ), una["NOMBRE"], icoRojo )
        resp = menu.lanza()
        if resp :
            siRehacer = False
            accion, num = resp
            if accion == "c" :
                una = self.editar( None, icoCrear )
                if una :
                    liPersonalidades.append( una )
                    siRehacer = True
            elif accion == "e" :
                una = self.editar( liPersonalidades[num], icoEditar )
                if una :
                    liPersonalidades[num] = una
                    siRehacer = True
            elif accion == "b" :
                if QTUtil2.pregunta( self.owner, tr( "PREGUNTA_BORRAMOS", liPersonalidades[num]["NOMBRE"] ) ) :
                    del liPersonalidades[num]
                    siRehacer = True

            if siRehacer :
                self.configuracion.graba()
                return True
        return False

#==========================================================================================================================================
