<?php

use Illuminate\Auth\UserInterface;
use Illuminate\Database\Eloquent\SoftDeletingTrait; 

class BackendUser extends Eloquent implements UserInterface {
    use SoftDeletingTrait;
    
    const TYPE_STAFF        = 1;
    const TYPE_CONSULTANT   = 2;

    protected $dates = ['deleted_at'];
	protected $hidden = array('password');
    protected $guarded = array('id'); 

    public function permissions()
    {
        return $this->belongsToMany('BackendPermission', 'backend_users_permissions');
    }

	/**
	 * Get the unique identifier for the user.
	 *
	 * @return mixed
	 */
	public function getAuthIdentifier()
	{
		return $this->getKey();
	}

	/**
	 * Get the password for the user.
	 *
	 * @return string
	 */
	public function getAuthPassword()
	{
		return $this->password;
	}

	/**
	 * Get the token value for the "remember me" session.
	 *
	 * @return string
	 */
	public function getRememberToken()
	{
		return $this->remember_token;
	}

	/**
	 * Set the token value for the "remember me" session.
	 *
	 * @param  string  $value
	 * @return void
	 */
	public function setRememberToken($value)
	{
		$this->remember_token = $value;
	}

	/**
	 * Get the column name for the "remember me" token.
	 *
	 * @return string
	 */
	public function getRememberTokenName()
	{
		return 'remember_token';
	}
    
    public function hasPermission ($permissions) {
        if(is_string($permissions)){
            $permissions = array($permissions);
        }

        $hasPermission = false;
            
        if(is_array($permissions)){
            foreach($permissions as $permission){
                if(str_contains($permission,"|")){
                    $hasPermission = $this->permissions->hasItem("name", explode("|",$permission));
                }else{
                    $hasPermission = $this->permissions->hasItem("name", $permission);
                }
                
                if(!$hasPermission){
                    break;
                } 
            }

            return $hasPermission;       
        }else{
            return false;
        }
    }
    
    public function setUsernameAttribute($username){
        $this->attributes["username"] = strtolower($username);
    }
     
    public function setPasswordAttribute($password){
        $this->attributes["password"] = Hash::make($password);
    }
    
    //TODO: implement this function when the connection between frontend 
    //and backend users is possible
    public function isCurator(){
        return false;
    }
    
    
}
