<?php

class Online extends \Eloquent {

	use SoftDeletingTrait;

    /**
     * {@inheritDoc}
     */
    public $table = 'sessions';

    /**
     * {@inheritDoc}
     */
    public $timestamps = true;

    /**
     * Returns all the guest users.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeGuests($query)
    {
        return $query->whereNull('user_id');
    }

    /**
     * Все залогиненные пользователи. Пользователь останется залогиненным даже если закроет браузер.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeRegistered($query)
    {
        return $query->whereNotNull('user_id')->with('user');
    }

    /**
     * Все пользователи в онлайне.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeOnline($query)
    {
        return $query->whereNotNull('user_id')->with('user')->where('last_activity', '>=', time()-60);
    }
    
    /**
     * Updates the session of the current user.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeUpdateCurrent($query)
    {
        Auth::check()? $this->setLastActivity() : '';
        
        return $query->where('id', Session::getId())->update(array(
            'user_id' => Auth::check() ? Auth::user()->id : null
        ));
    }

    public function setLastActivity()
    {
        $user                = User::find(Auth::user()->id);
        $user->last_activity = time();
        $user->save();
    }
    
    /**
     * Returns the user that belongs to this entry.
     *
     * @return \Cartalyst\Sentry\Users\EloquentUser
     */
    public function user()
    {
        return $this->belongsTo('User');
    }

}