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

#==========================================================================================================================================
import os

import Code.Usu as Usu
import Code.Configuracion as Configuracion
import Code.Util as Util

from PySide import QtCore, QtGui

import Controles
import Colocacion
import Iconos

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

#==========================================================================================================================================
def lanzaGUI( procesador ) :
    """
    Lanzador del interfaz gráfico de la aplicación.
    """
    app = QtGui.QApplication([])

    liUsuarios = Usu.listaUsuarios()
    if liUsuarios :
        usuario = pideUsuario( liUsuarios )
        if usuario is None :
            return
        user = str(usuario.numero) if usuario.numero else ""
    else :
        user = ""

    procesador.iniciaConUsuario( user )

    configuracion = procesador.configuracion

    # Comprobamos el lenguaje
    if not os.path.isfile( configuracion.fichero ) :
        if user :
            confMain = Configuracion.Configuracion("")
            ori = confMain.ficheroMExternos
            confMain.lee()
            confMain.limpia( usuario.nombre )
            confMain.ponCarpetas( user )
            confMain.graba()
            procesador.configuracion = confMain

            Util.copiaFichero( ori, confMain.carpeta )

        else :
            lng = pideLenguaje( configuracion.listaTraducciones() )
            configuracion.traductor = lng if lng else "english"
            configuracion.graba()

    # Estilo
    global stylename
    styleName = configuracion.estilo
    app.setStyle(QtGui.QStyleFactory.create(styleName))
    QtGui.QApplication.setPalette(QtGui.QApplication.style().standardPalette())

    # Lanzamos la pantalla
    procesador.iniciarGUI()

    fichlng = "Translations/lk_%s.qm"%configuracion.lng()

    if os.path.isfile(fichlng) :
        translator = QtCore.QTranslator()
        translator.load(fichlng)
        app.installTranslator(translator)

    return app.exec_()

#==========================================================================================================================================
def pideLenguaje( liTraducciones ) :

    menu = Controles.LMenu(puntos=10)

    menu.separador()
    menu.opcion( None, 'El ajedrez de Lucas', siDeshabilitado = True )
    menu.separador()

    li = [ 'español' ]
    li.extend( liTraducciones )
    for trad in li :
        menu.opcion( trad, trad, Iconos.PuntoNaranja() )
    menu.separador()
    menu.opcion( None, 'Lucas Chess', siDeshabilitado = True )
    menu.separador()

    return menu.lanza()
#==========================================================================================================================================

class WPassword( QtGui.QDialog ) :
    def __init__( self, liUsuarios ) :

        QtGui.QDialog.__init__(self,None)
        self.setWindowFlags( QtCore.Qt.Dialog | QtCore.Qt.WindowTitleHint )

        main = liUsuarios[0]

        self.setWindowTitle( main.trlucas )
        self.setWindowIcon( Iconos.Usuarios() )

        liOpciones = [ (usuario.nombre, usuario) for usuario in liUsuarios ]
        lbU = Controles.LB( main.trusuario + " :" )
        self.cbU = Controles.CB( liOpciones, main )

        lbP = Controles.LB( main.trpassword + " :" )
        self.edP = Controles.ED( self ).password()

        btaceptar = Controles.PB( self, main.traceptar, rutina = self.accept, plano = False )
        btcancelar = Controles.PB( self, main.trcancelar, rutina = self.reject, plano = False )

        ly = Colocacion.G()
        ly.controld(lbU, 0, 0).control(self.cbU, 0, 1)
        ly.controld(lbP, 1, 0).control(self.edP, 1, 1)

        lybt = Colocacion.H().relleno(1).control( btaceptar ).espacio(10).control( btcancelar )

        layout = Colocacion.V().otro(ly).espacio(10).otro(lybt).margen(10)

        self.setLayout(layout)
        self.edP.setFocus()

    def resultado( self ) :
        usuario = self.cbU.resultado()
        return usuario if self.edP.texto().strip() == usuario.password else None

#==========================================================================================================================================
def pideUsuario( liUsuarios ) :

    # Miramos si alguno tiene clave, si es así, lanzamos ventana
    siPass = False
    for usuario in liUsuarios :
        if usuario.password :
            siPass = True
    if siPass :
        intentos = 3
        while True :
            w = WPassword(liUsuarios)
            if w.exec_() :
                usuario = w.resultado()
                if usuario :
                    break
            else :
                return None
            intentos -= 1
            if intentos == 0 :
                return None
    else :
        if len(liUsuarios) == 1 :
            usuario = liUsuarios[0]
        else :
            menu = Controles.LMenu(puntos=10)
            menu.separador()

            for usuario in liUsuarios :
                menu.opcion( usuario, usuario.nombre, Iconos.PuntoNaranja() )
                menu.separador()

            usuario = menu.lanza()
            if usuario is None :
                return None

    return usuario

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