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

import os

from Code.Traducir import tr

import Code.Usu as Usu

import Colocacion
import Iconos

import Controles
import QTUtil

import Grid
import Columnas

import QTVarios

import Delegados

#==========================================================================================================================================
class WUsuarios( QTVarios.WDialogo ):

    def __init__( self, procesador ) :

        self.configuracion = procesador.configuracion

        self.leeUsuarios()

        titulo = tr( "USUARIOS" )
        icono = Iconos.Usuarios()
        extparam = "users"
        QTVarios.WDialogo.__init__(self, procesador.pantalla, titulo, icono, extparam )

        # Toolbar
        liAcciones = (  ( tr( "ACEPTAR" ), Iconos.TB_Aceptar(), "aceptar" ), None,
                        ( tr( "CANCELAR" ), Iconos.TB_Cancelar(), "cancelar" ), None,
                        ( tr( "USUARIOS_NUEVO" ), Iconos.TB_Nuevo(), "nuevo" ), None,
                        ( tr( "BORRAR" ), Iconos.TB_Borrar(), "borrar" ), None,
                        )
        tb = Controles.TB( self, liAcciones )

        # Lista
        oColumnas = Columnas.ListaColumnas()
        oColumnas.nueva( "NUMERO", tr( "AB_NUM" ), 40, siCentrado=True )
        oColumnas.nueva( "USUARIO", tr( "USUARIO" ), 140, edicion=Delegados.LineaTexto() )
        oColumnas.nueva( "PASSWORD", tr( "USUARIO_PASSWORD" ), 100, edicion=Delegados.LineaTexto(siPassword = True) )

        self.grid = Grid.Grid( self, oColumnas, siEditable=True )

        # Layout
        layout = Colocacion.V().control(tb).control(self.grid).margen( 3 )
        self.setLayout( layout )

        self.grid.gotop()
        self.grid.setFocus()

        self.siPlay = False

        self.registraGrid( self.grid )

        if not self.recuperarVideo() :
            self.resize( 310, 400 )

    #--------------------------------------------------------------------------------------------------------------------------------
    def leeUsuarios( self ) :
        self.liUsuarios = Usu.listaUsuarios()
        if self.liUsuarios is None :
            usuario = Usu.Usuario()
            usuario.numero = 0
            usuario.nombre = self.configuracion.jugador
            usuario.password = ""
            self.liUsuarios = [ usuario ]

        main = self.liUsuarios[0]
        # Para que al pedir la password siempre en el idioma del main en principio solo hace falta el password pero por si acaso se cambia de opinión
        main.trlucas = tr( "El ajedrez de Lucas" )
        main.trusuario = tr( "USUARIO" )
        main.trpassword = tr( "USUARIO_PASSWORD" )
        main.traceptar = tr( "ACEPTAR" )
        main.trcancelar = tr( "CANCELAR" )

    #--------------------------------------------------------------------------------------------------------------------------------
    def procesarTB( self ) :
        accion = self.sender().clave
        if accion == "aceptar" :
            self.guardarVideo()
            self.aceptar()
        elif accion == "cancelar" :
            self.guardarVideo()
            self.reject()
        elif accion == "nuevo" :
            self.nuevo()
        elif accion == "borrar" :
            self.borrar()

    #--------------------------------------------------------------------------------------------------------------------------------
    def nuevo( self ) :

        li = []
        for usuario in self.liUsuarios :
            li.append(usuario.numero)

        plantilla = self.configuracion.carpetaUsers + "/%d"
        numero = 1
        while (numero in li) or os.path.isdir( plantilla%numero ) :
            numero += 1

        usuario = Usu.Usuario()
        usuario.nombre = tr( "USUARIO_NUEVO", str(numero) )
        usuario.numero = numero
        usuario.clave = ""

        self.liUsuarios.append(usuario)
        self.grid.refresh()
        self.grid.goto(len(self.liUsuarios)-1,1)
        self.grid.setFocus()

    #--------------------------------------------------------------------------------------------------------------------------------
    def aceptar( self ) :

        Usu.guardaUsuarios( self.liUsuarios )
        self.accept()

    #--------------------------------------------------------------------------------------------------------------------------------
    def borrar( self ) :

        fila = self.grid.recno()
        if fila > 0 :
            del self.liUsuarios[fila]
            self.grid.refresh()
            self.grid.setFocus()

    #--------------------------------------------------------------------------------------------------------------------------------
    def gridNumDatos( self, grid ) :
        return len(self.liUsuarios)

    #--------------------------------------------------------------------------------------------------------------------------------
    def gridPonValor( self, grid, fila, columna, valor ) :
        campo = columna.clave
        valor = valor.strip()
        usuario = self.liUsuarios[fila]
        if campo == "USUARIO" :
            if valor :
                usuario.nombre = valor
            else :
                QTUtil.beep()
        else :
            usuario.password = valor

    #--------------------------------------------------------------------------------------------------------------------------------
    def gridDato( self, grid, fila, oColumna ) :
        clave = oColumna.clave
        usuario = self.liUsuarios[fila]
        if clave == "NUMERO" :
            return str(usuario.numero) if usuario.numero else "-"
        elif clave == "USUARIO" :
            return usuario.nombre
        if clave == "PASSWORD" :
            return "x"*len(usuario.password)

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

def editaUsuarios( procesador ) :
    w = WUsuarios(procesador)
    if w.exec_() :
        pass
