<?php

/**
 * @class UsuarioWeb
 * @brief Guarda los datos del usuario registrado que está en sesión
 *
 * @package application.components
 */
class UsuarioWeb extends CWebUser {

    private $_model;

    /**
     * @brief Actualiza la fecha de la última entrada (last login) del usuario
     * que ha iniciado sesión.
     */
    public function afterLogin(){
        if (($this->_model === null) && ($this->loadUser()))
            Usuario::model()->updateByPk($this->id, array(
                'last_login_time'=> date("Y-m-d H:i:s"), 
            ));
        return true;
    }    
    
    /**
     * @brief ID de la empresa del usuario que está en sesión.
     * @return integer
     */
    public function getId_empresa() {
        $usuario = $this->loadUser($this->id);
        return $usuario->id_empresa;
    }

    /**
     * @brief Comprueba si el usuario que está en sesión es coordinador o no.
     * @return boolean
     */
    public function getEsCoordinador() {
        $usuario = $this->loadUser();
        return ($usuario->tipo == Usuario::TIPO_USUARIO_COORDINADOR);
    }

    /**
     * @brief Comprueba si el usuario que está en sesión tiene/puede tener
     * un equipo de agentes. 
     * @return boolean
     */
    public function getTieneEquipo() {
        $subscripcion = $this->loadSubscripcion();
        if ($subscripcion) 
            return ($subscripcion->producto->max_agentes > 0);
        else 
            return false;
    }

    /**
     * @brief Devuelve la subscripción del usuario que está en sesión.
     * @return Subscripcion
     */
    public function getSubscripcion() {
        return $this->loadSubscripcion();
    }

    /**
     * @brief Devuelve el nombre del usuario que está en sesión.
     * Si el usuario ha rellenado su nombre y apellidos, devuelve el nombre
     * completo. Si no, devuelve la dirección e-mail del usuario.
     * @return string
     */
    public function getName() {
        $usuario = $this->loadUser();
        return ($usuario && $usuario->nombre) ? $usuario->nombreCompleto : parent::getName();
    }
    
    /**
     * @brief Devuelve el email del usuario que está en sesión.
     * @return string
     */
    public function getEmail() {
        $usuario = $this->loadUser();
        return $usuario->email;
    }

    /**
     * @brief Devuelve el usuario que ha hecho sesión.
     * @return Usuario
     */
    protected function loadUser() {
        if ($this->_model === null) {
            $this->_model = Usuario::model()->findByPk($this->id);
        }
        return $this->_model;
    }

    /**
     * @brief Devuelve la subscripción activa del usuario que ha hecho sesión.
     * @return Subscripcion
     */
    protected function loadSubscripcion() {
        return Subscripcion::model()->activa()->findByAttributes(array('id_usuario' => $this->id));
    }
    
    
}

?>