<?php 

class User extends Model {
    protected $dbTable = "users";
    protected $dbFields = Array (
        'uuid' =>       ['type'=>'text','required','unique','autoValMethod'=>'gen_ulid'],
        'password' =>   ['type'=>'text'],
        'registered' => ['type'=>'datetime','required','unique','autoValMethod'=>'getDateTime'],
        'email' =>      ['type'=>'email','unique'],
        'firstname' =>  ['type'=>'text'],
        'lastname' =>   ['type'=>'text'],
        'last_login' => ['type'=>'datetime','required','unique','autoValMethod'=>'getDateTime'],
        'token' =>      ['type'=>'text','required','unique','autoValMethod'=>'uuid4'],
        'timezone' =>   ['type'=>'int'],
        'active' =>   ['type'=>'int','default'=>0]
    );
    protected $hidden = ['password','token'];

    function login()
    {
        if(!$this->id) return false;
        $this->last_login = $this->getDateTime();
        $this->save();

        $_SESSION['user'] = $this;
        $_SESSION['userid'] = $this->id;
    }

    function logout()
    {
        if(!$this->id) return false;
        unset($_SESSION['user']);
    }

    function exists($id)
    {
        return $this->redis->exists($this->dbTable.':'.$id);
    }

    function getAll($filtered = true)
    {
        $keys = $this->redis->keys($this->dbTable.':*');
        $users = [];
        foreach($keys as $key)
        {
            $id = end(explode(':',$key));
            $u = new User();
            $u->load($id);
            if($filtered===true)
                $users[] = $u->getDataFiltered();
            else
                $users[] = $u->data;
        }
        return $users;
    }
    
}