<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth as FacadesAuth;
use Illuminate\Support\Facades\Crypt;
use DB;
use Auth;

use App\Model\User;
use App\Model\Results;
use App\Model\Category;
use App\Model\Subjects;
use App\Model\Questions;
use App\Model\Essay_test;
use App\Model\Exam_topics;

class OnboardingController extends Controller
{
    public $total_questions = 10;
    public $pass_question = 7;
    public $pass_percent = 50;

     /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(){
        $this->middleware('auth');
        $this->middleware('RegistrationStage')->except('saveQualifications','saveResult');
    }
   
    public function qualification(Request $request){
        $userData = Auth::user();
        $subjects = Subjects::where(['status'=>1])->get();
        $category = Category::where(['status'=>1])->get();
        $degree = ["BA","MA","BBA","MBA","M.Tech","B.Tech","Other"];

        return view('onBoarding.qualification',compact('subjects','userData','degree','category'));
    }
 
    public function objectiveTest(Request $request){
        #checking Exam status
        $examStatus = 0; 
        $result = Results::select(DB::raw('sum(answer_status) as right_answers'), DB::raw('count(id) as total_answer'))->where(['freelancer_id'=>Auth::user()->id])->get()[0];
       
        if($result->total_answer > 7){
            $examStatus = 1; #fail
            if($result->right_answers > 5){
                $examStatus = 2; #pass
            }
        }else if($result->total_answer > 0){
            $examStatus = 1;
        }
        // dd($examStatus);
        #todo::dynamic paper type
        $questions = Questions::select(['id','question','options','correct_ans'])->where(['paper_id'=>6])->inRandomOrder()->take(10)->get();
        $newQues = [];
        foreach($questions as $q){
            $newQues[] = [
                'id' => $q->id,
                'q' => base64_encode($q->question),
                'k' => Crypt::encryptString($q->correct_ans),
                'o' => base64_encode($q->options),
            ];
        }
       
        return view('onBoarding.objectiveTest',compact('newQues','examStatus'));
    }

    public function saveResult(Request $request){
        if($request->getResult){
            $result = Results::select(DB::raw('sum(answer_status) as right_answers'), DB::raw('count(id) as total_answer'))->where(['freelancer_id'=>Auth::user()->id])->get()[0];
            $data = ['total_answer' => $result->total_answer,'right_answers'=>$result->right_answers];
            $user = User::find(Auth::user()->id);
            // if($result->total_answer == $this->total_questions){ #test completed
                if($result->right_answers >= $this->pass_question){
                    $examStatus = 2; #pass
                    $msg = 'pass';
                    $user->reg_stage = 2;
                }else{
                    $examStatus = 1; #fail
                    $user->status = 2;
                    $msg = 'fail';
                    Auth::logout();
                }
            // }else{ #test not competed
            //     $examStatus = 0;
            //     $msg = 'test not competed';
            //     $user->status = 3;
            //     Auth::logout();
            // }
            $user->save();

            return ['status'=>$examStatus,'message'=>$msg , 'data' => $data];
        }else if($request->checkedVal){
            $res = Results::where(['question_id'=>$request->id,'freelancer_id'=>Auth::user()->id])->get();
            if(!count($res)){
                $result = new Results;
                $result->question_id = $request->id;
                $result->freelancer_id = Auth::user()->id;
                $result->answer_status = $request->checkedVal == Crypt::decryptString($request->k) ? 1:0;
                $result->save();
                return ['status'=>1,'Got your answer'];
            }else{
                return ['status'=>0,'Already answered'];
            }
        }else if($request->essay){
            $essayTest = new Essay_test;
            $essayTest->essay = $request->essay;
            $essayTest->style = $request->style;
            $essayTest->topic = $request->topic;
            $essayTest->formatting = $request->formatting;
            $essayTest->freelancer_id = Auth::user()->id;
            if($essayTest->save()){
                $user = User::find(Auth::user()->id);
                $user->reg_stage = 3;
                $user->save();
                return ['status'=>1,'Got your essay'];
            }else{
                return ['status'=>0,'something went wrong'];
            }
        }
    }

    public function subjectiveTest(Request $request){
        $topic = Exam_topics::select(['topic'])->where(['subject_id'=>1])->inRandomOrder()->get()->first();
        $styles = ['Vancouver','Harvard','APA','MLA'];
        $formatting = ['EN-US','EN-UK'];
        
        $styles = $styles[array_rand($styles)];
        $formatting = $formatting[array_rand($formatting)];


        return view('onBoarding.subjectiveTest',compact('topic','styles','formatting'));
    }

    public function saveQualifications(Request $request){ 
        // dd($request);
        if($request->method() == 'POST'){
            $user = User::find(Auth::user()->id);
            $user->reg_stage = 2;
            if($user->profile_percentage <100) $user->profile_percentage = $user->profile_percentage+10;
            $user->category_id = implode(',',$request->category);
            $user->experience_status = $request->experience_status;
            $user->experience = $request->experience;
            $user->group_work_status = $request->group_work_status;
            $user->degree = $request->degree;
            $user->proficient = implode(',',$request->proficient);
            $user->save();
            return ['status'=>1];
        }
    }  
}
