#!/usr/bin/env python
# encoding: iso-8859-15
#
#Minë. Mundo Interactivo-Narrativo en Español [Tierra-Media]
#Copyright (C) 2002  Pablo Ruiz Múzquiz
#
#
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
#Fichero: DialogoRecuperar.py

"""Clase DialogoRecuperar."""

import logging
from utils import *
import Mundo
import Dialogo

log = logging.getLogger("Dialogos")

class DialogoRecuperar(Dialogo.Dialogo):
    """Dialogo mantenido con el jugador cuando quiere cargar un personaje
    ya existente.
    """

    def __init__(self, padre, conn):
        Dialogo.Dialogo.__init__(self, padre, conn)
	self.__personaje = None
        self.estado_0()


    def estado_0(self):
        self.poner_estado(0)
        self.conn().send('¿Cómo se llama (pulsa intro para salir)?: ', 0)


    def comando_0(self, cmd_list):
	import DialogoInicial
	import DialogoNormal

        dlg_siguiente = None

        if len(cmd_list) == 0:
            dlg_siguiente = DialogoInicial.DialogoInicial(self.padre(), self.conn())
        else:
	    id = cmd_list[0]
	    log.info("Intentando recuperar personaje " + id)
	    if Mundo.pjs_activos.has_key(id):
		self.conn().send("Ese personaje ya se encuentra en juego en este momento. Debes elegir otro.")
		log.info("Personaje llamado " + id + " no recuperado por encontrarse ya en juego.")
		self.estado_0()
	    else:  
		limbo = Mundo.localizar_sala(Mundo.ID_SALA_LIMBO)
		if not limbo.personajes.has_key(id):
		    self.conn().send("No existe ningún personaje con ese id. Debes elegir otro.")
		    log.info("Personaje llamado " + id + " no recuperado porque no existe.")
		    self.estado_0()
		else:
		    self.__personaje = limbo.personajes[id]
		    if self.__personaje.estado != 'vivo':
			self.conn().send("Lo sentimos, " + id + " ya está muerto...")
			log.info( "Personaje llamado " + id + " no recuperado porque estaba muerto.")
			self.estado_0()
		    else:
                        log.info("Personaje llamado " + self.__personaje.id + " encontrado en el limbo. Comprobando clave...")
			self.estado_1()

	return dlg_siguiente


    def estado_1(self):
        self.poner_estado(1)
        self.conn().send('')
        self.conn().send('¿Qué clave está asociada a este personaje (pulsa intro para salir)?: ', 0)


    def comando_1(self, cmd_list):
	import DialogoInicial
	import DialogoNormal

        dlg_siguiente = None

        if len(cmd_list) == 0:
            dlg_siguiente = DialogoInicial.DialogoInicial(self.padre(), self.conn())
        else:
	    clave = cmd_list[0]
	    log.info("Verificando clave con personaje " + self.__personaje.id)
            if clave != self.__personaje.clave:
		self.conn().send("¡Clave incorrecta!")
		log.info("Personaje llamado " + self.__personaje.id + " no recuperado debido a clave errónea.")
		self.estado_1()
	    else:
                self.conn().send("¡Clave correcta!")
		self.padre().controlar_personaje(self.__personaje)
                log.info("Personaje llamado " + self.__personaje.id + " recuperado con éxito. Clave correcta.")
                dlg_siguiente = DialogoNormal.DialogoNormal(self.padre(), self.conn(), self.__personaje)

	return dlg_siguiente
	    
	    
# Código para pruebas unitarias del módulo.

if (__name__ == '__main__'):
    print "No hay código para pruebas unitarias del módulo."
    print "Para probar, ejecutar mine.py y conectarse via telnet."

