<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Models\Academy;
use App\Models\Question;
use Illuminate\Http\Request;
use App\Models\QuestionFeedback;
use App\Mail\AssessmentCompleted;
use App\Models\AcademyQuestionsMap;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use App\Models\QuestionAnswerFeedback;

class AcademyController extends Controller
{
    public function getWithMap()
    {
        $academies = Academy::all()->toArray();
        return api()->success()->data(compact('academies'))->send();
    }

    public function updateMap(Request $request, Academy $academy)
    {
        foreach ($request->map as $map) {
            AcademyQuestionsMap::updateOrCreate(['academy_id' => $academy->id, 'question_type_id' => $map['question_type_id']], ['amount' => $map['amount']]);
        }

        return api()->success()->send();
    }

    public function review()
    {
        $questionFeedbacks = QuestionFeedback::where('user_id', Auth::id())->get();
        $answerFeedbacks = QuestionAnswerFeedback::where('user_id', Auth::id())->get();

        $questions = Question::with('answers', 'type')->get();

        return view('review.index', compact('questions', 'questionFeedbacks', 'answerFeedbacks'));
    }

    public function submitReview(Request $request)
    {
        $questionId = $request->questionId;
        $userId = Auth::id();
        $status = $request->status;
        $level = $request->level;

        QuestionFeedback::updateOrCreate([
            'question_id' => $questionId,
            'user_id' => $userId
        ], [
            // 'question_id' => $questionId,
            // 'user_id' => $userId,
            'status' => $status,
            'level' => $level
        ]);

        return true;
    }

    public function submitAnswerReview(Request $request)
    {
        $answerId = $request->answerId;
        $userId = Auth::id();
        $status = $request->status;

        QuestionAnswerFeedback::updateOrCreate(
            [
                'question_answer_id' => $answerId,
                'user_id' => $userId
            ],
            [
                'status' => $status
            ]
        );

        return true;
    }

    public function previewMail(User $user)
    {
        $mail = new AssessmentCompleted($user);

        return view('preview.mail', compact('user', 'mail'));
    }

    public function sendMail(User $user)
    {
        $message = (new AssessmentCompleted($user))
            ->onConnection('database')
            ->onQueue('emails');

        Mail::to($user)
            ->locale(App::currentLocale())
            ->send($message);

        return "Mail sent to {$user->email}";
    }
}
