<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;

class Test extends Model
{
    protected $fillable = ["title", "question_count", "question_count_to_fail, time_limit"];

    public function questions()
    {
        return $this->hasMany(Question::class);
    }

    public function company()
    {
        return $this->belongsTo(Company::class);
    }

    public function testdetails()
    {
        return $this->hasMany(Testdetail::class);
    }



    public function randomizeQuestions()
    {
        return $this->questions->random($this->question_count)->shuffle();
    }

    public function hasFailed($wrong_answers)
    {
        if ($this->question_count_to_fail == null) {
            return false;
        }
        return $this->question_count_to_fail < $wrong_answers;
    }

    public function lastQuestion($question_counter)
    {
        if ($this->question_count == $question_counter) {
            return true;
        }
        return false;
    }

    public function createTest($request)
    {
        $this->title = $request["title"];
        $this->question_count = $request["question_count"];
        if ($request["question_count_to_fail"])  {
            $this->question_count_to_fail = $request["question_count_to_fail"];
        }
        $this->time_limit = $request["time_limit"];
        if (Auth::user()->isAdministrator()) {
            $this->group_id = $request["group_id"];
            $this->save();
            return true;
        }
        Group::find(Auth::user()->group_id)->tests()->save($this);
        return true;
    }

    public function updateTest($request)
    {
        $this->update($request);
    }

    public function nextQuestionNumber()
    {
        return count($this->questions)+1;
    }

    public function deleteTest()
    {
        $questions = $this->questions;
        foreach ($questions as $question) {
            $question->deleteQuestion();
        }
        $this->delete();
        return true;
    }

    public function sessionPurge()
    {
        session(['questions' => null, 'question_counter' => null, 'test' => null, 'wrong_answers' => null, 'correct_answers' => null, 'is_correct' => null, 'has_failed' => null, 'last_question' => null, 'options' => null, 'start_time' => null, 'time_limit' => null, 'answers' => null]);
        return true;
    }

    public function timePassed($start_time)
    {
        if ($start_time+$this->time_limit < time()) {
            return true;
        }
        return false;
    }

    public function timeLimitInMinutes()
    {
        return $this->time_limit/60;
    }

    public function timeLimitInHours()
    {
        return $this->time_limit/60/60;
    }

    public function progressBarWidth($question_counter)
    {
        return 100/$this->question_count*$question_counter;
    }
}