<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Test;
use App\Group;
use App\User;
use App\Question;
use App\Option;

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }


    public function index()
    {
        return view('admin.admin');
    }

    public function showUser()
    {
        $users = User::all();
        return view('admin.show.users', compact('users'));
    }

    public function delUser(User $user)
    {
        return view('admin.delete.user', compact('user'));
    }

    public function deleteUser(User $user)
    {
        $user->deleteUser();
        return redirect('/admin/users');
    }

    public function user()
    {
        return view('admin.new.user');
    }

    public function addUser()
    {
        $user = new User;
        $user->addUser(request()->all());
        return redirect('/admin/users');
    }




    public function showTests()
    {
        $tests = Test::all();
        return view('admin.show.tests', compact('tests'));
    }

    public function showTest(Test $test)
    {
        $questions = $test->questions;
        return view('admin.show.test', compact('test'), compact('questions'));
    }

    public function test()
    {
        return view('admin.new.test');
    }

    public function addTest()
    {
        $user = \Auth::user();
        $test = new Test(request()->all());
        if ($user->company_id) {
            $group = Group::find($user->company_id);
            $group->tests()->save($test);
            return redirect('/admin/tests');
        }
        $test->save();
        return redirect('/admin/tests');
    }

    public function editTest(Test $test)
    {
        return view('admin.edit.test', compact('test'));
    }

    public function updateTest(Test $test)
    {
        $test->update(request()->all());
        return redirect("/admin/tests/$test->id");
    }

    public function delTest(Test $test)
    {
        return view('admin.delete.test', compact('test'));
    }

    public function deleteTest(Test $test)
    {
        $questions = $test->questions;
        foreach ($questions as $question) {
            $options = $question->options;
            foreach ($options as $option) {
                $option->delete();
            }
            $question->delete();
        }
        $test->delete();
        return redirect('/admin/tests');
    }

    public function question(Test $test)
    {
        $question_number = count($test->questions)+1;
        return view('admin.new.question', compact('test'), compact('question_number'));
    }

    public function addQuestion(Test $test)
    {
        $question = new Question;
        $question->title = request()->title;
        $question->question = request()->question;
        if (empty(Option::all()->last()->id)) {
            $question->answer_id = 1;
        } else {
            $question->answer_id = Option::all()->last()->id+1;
        }
        $test->questions()->save($question);
        $option1 = new Option;
        $option1->option = request()->option1;
        $option2 = new Option;
        $option2->option = request()->option2;
        $option3 = new Option;
        $option3->option = request()->option3;
        $option4 = new Option;
        $option4->option = request()->option4;
        $question->options()->save($option1);
        $question->options()->save($option2);
        $question->options()->save($option3);
        $question->options()->save($option4);
        return redirect("/admin/tests/$test->id");
    }

    public function delQuestion(Question $question)
    {
        return view('admin.delete.question', compact('question'));
    }

    public function deleteQuestion(Question $question)
    {
        $test = $question->test;
        $options = $question->options;
        foreach ($options as $option) {
            $option->delete();
        }
        $question->delete();
        return redirect("/admin/tests/$test->id");
    }

    public function editQuestion(Question $question)
    {
        $options = $question->options;
        return view('admin.edit.question', compact('question'), compact('options'));
    }

    public function updateQuestion(Question $question)
    {
        $test = $question->test;
        $question->question = request()->question;
        $options = $question->options;
        $options[0]->option = request()->option1;
        $options[1]->option = request()->option2;
        $options[2]->option = request()->option3;
        $options[3]->option = request()->option4;
        $question->update();
        $options[0]->update();
        $options[1]->update();
        $options[2]->update();
        $options[3]->update();
        return redirect("/admin/tests/$test->id");
    }
}