<?php

class Eppe_Auth extends Zend_Auth {

	/**
	 *
	 * @return Eppe_Auth
	 */
	final public static function _() {
        static $instances = array();

		$calledClass = get_called_class();

		if( !isset($instances[$calledClass]) ) {
			$instances[$calledClass] = new $calledClass();
		}

		return $instances[$calledClass];
	}

	final static function _getDefaultClassname($default='Eppe_Auth_Frontend'){
		$c = get_called_class();
		if($c=='Eppe_Auth'){
			$c = $default;
		}
		
		return $c;
	}
	
	public function isLoggedIn($role_id = null) {
		if ($this->hasIdentity()) {
			if (NULL !== $role_id) {
				$storage = $this->getIdentity();
				if ($storage->role_id == $role_id) {
					return true;
				}
				else {
					return false;
				}
			}
			else {
				return true;
			}
		}
		return false;
	}

	/**
	 * Czy użytkownik posiada role podaną w sposób tekstowy (nazwa roli)
	 * @param string $roleName
	 * @return boolean
	 */
	static function userHasRoleName($roleName) {
		$class = static::_getDefaultClassname();
		
		$user = $class::_()->getIdentity();
		if ($user) {
			$roles = $user->sharedRole;
			foreach ($roles as $role) {
				if ($role->name == $roleName) {
					return true;
				}
			}
		}
	}

	/**
	 * @return RedBean_OODBBean
	 */
	static function getCurrentUser() {
		$class = static::_getDefaultClassname();
		/* @var $user RedBean_OODBBean */
		$user = $class::_()->getIdentity();
		return $user;
	}

	/**
	 * Zwraca array beanów z rolami usera
	 * @return array
	 */
	static function getUserRoles() {
		$class = static::_getDefaultClassname();
		return $class::_()->getIdentity()->sharedRole;
	}

	/**
	 * Informuje, czy użytkownik posada daną rolę
	 *
	 * @param int $role_id
	 * @return bool
	 */
	static function userHasRole($role_id) {
		$class = static::_getDefaultClassname();
		return array_key_exists($role_id, $class::getUserRoles());
	}

}
