<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Models\KuesionerLearningStyle;
use App\Models\KuesionerMetakognitif;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Illuminate\Support\Facades\Log;

class KuesionerMetaController extends Controller
{
    public function showquestion()
    {
        $questions = [
            "Saya bertanya kepada diri sendiri, ”Apakah saya sudah mencapai tujuan saya?”, ketika sedang berupaya mencapai tujuan secara intensif.",
            "Saya mempertimbangkan berbagai pilihan sebelum saya menyelesaikan sebuah permasalahan.",
            "Saya coba menggunakan cara-cara yang pernah saya pakai sebelumnya.",
            "Saya terus menerus mengatur diri selama belajar agar memiliki waktu yang cukup.",
            "Saya memahami kekuatan dan kelemahan kecerdasan saya.",
            "Saya berpikir tentang apa yang sebenarnya perlu saya pelajari sebelum mengerjakan tugas.",
            "Saya menyadari bagaimana baiknya saya menyelesaikan suatu tes.",
            "Saya menyusun tujuan-tujuan khusus sebelum saya mengerjakan tugas.",
            "Saya bertindak perlahan-lahan dan hati-hati bila mana menjumpai informasi penting.",
            "Saya mengetahui macam informasi apa yang paling penting untuk dipelajari.",
            "Saya bertanya kepada diri sendiri ketika mempertimbangkan seluruh pilihan untuk memecahkan suatu masalah.",
            "Saya terampil/mahir menyusun dan merangkai suatu informasi.",
            "Saya secara sadar memusatkan perhatian kepada informasi yang penting.",
            "Untuk tiap cara yang saya gunakan, saya mempunyai maksud tertentu.",
            "Saya belajar paling baik ketika saya mengetahui topik pembelajaran itu.",
            "Saya mengetahui apa yang diharapkan guru untuk saya pelajari.",
            "Saya mudah mengingat informasi.",
            "Saya menggunakan cara belajar yang berbeda-beda tergantung pada situasi dan kondisi.",
            "Setelah saya menyelesaikan suatu tugas, saya bertanya kepada diri sendiri apakah ada cara yang lebih mudah.",
            "Saya mengendalikan sendiri kualitas belajar saya.",
            "Secara teratur saya melakukan peninjauan kemampuan untuk menolong saya memahami hubungan-hubungan penting.",
            "Sebelum memulai sesuatu, saya bertanya kepada diri sendiri tentang hal-hal terkait.",
            "Saya mempertimbangkan berbagai cara untuk memecahkan sesuatu masalah sebelum akhirnya memutuskan salah satu diantaranya.",
            "Setiap kali selesai belajar, saya membuat rangkuman.",
            "Saya menanyakan orang lain bilamana saya tidak memahami sesuatu.",
            "Saya dapat memotivasi diri untuk belajar bilamana diperlukan.",
            "Saya menyadari cara apa yang digunakan ketika saya belajar.",
            "Saya biasa memikirkan manfaat cara - cara belajar yang saya pakai.",
            "Saya memanfaatkan kekuatan kecerdasan saya untuk menutupi kekurangan saya.",
            "Saya memusatkan perhatian terhadap arti dan manfaat dari informasi yang baru.",
            "Saya menemukan contoh-contoh sendiri sehingga informasi menjadi lebih bermakna atau jelas.",
            "Saya tergolong adil menilai diri sendiri tentang seberapa baiknya saya memahami sesuatu.",
            "Secara otomatis saya sadar menggunakan cara belajar yang berguna.",
            "Secara teratur saya istirahat sebentar untuk mengatur pemahaman saya.",
            "Saya menyadari/mengetahui bahwa setiap cara yang saya gunakan adalah yang paling efektif atau tepat.",
            "Saya bertanya kepada diri sendiri tentang seberapa baik saya mencapai tujuan setelah menyelesaikan tugas.",
            "Saya membuat gambar atau bagan untuk menolong saya selama belajar.",
            "Saya bertanya kepada diri sendiri apakah saya telah mempertimbangkan semua pilihan, setiap kali saya memecahkan suatu masalah.",
            "Saya berupaya memahami informasi baru dengan kata-kata saya sendiri.",
            "Saya mengubah cara jika saya gagal memahami.",
            "Saya menggunakan urutan topik/materi dari buku/teks untuk membantu saya belajar.",
            "Saya membaca petunjuk secara teliti sebelum memulai melakukan suatu tugas.",
            "Saya bertanya kepada diri sendiri apakah hal yang sedang dibaca berhubungan dengan apa yang telah saya ketahui.",
            "Saya memikirkan kembali anggapan saya ketika saya bingung.",
            "Saya mengatur waktu saya untuk mencapai tujuan sebaik-baiknya.",
            "Saya lebih banyak belajar jika saya tertarik/senang dengan topik.",
            "Saya berupaya membagi kegiatan belajar saya menjadi langkah-langkah yang lebih kecil.",
            "Saya lebih memperhatikan makna umum dari pada makna khusus.",
            "Saya bertanya kepada diri sendiri tentang seberapa baik saya bekerja, pada waktu mempelajari sesuatu yang baru.",
            "Saya bertanya kepada diri sendiri apakah saya belajar sebanyak yang saya mampu, setiap kali saya menyelesaikan tugas.",
            "Saya melupakan informasi baru yang tidak jelas.",
            "Saya berhenti dan selanjutnya membaca kembali jika saya bingung."
        ];

        return view('main.page.kuesioner.kuesioner_metacognitive', compact('questions'));
    }

    public function store(Request $request)
    {
        if (!Auth::check()) {
            return redirect()->route('login')->with('error', 'Silakan login terlebih dahulu.');
        }

        $user = User::where('email', Auth::user()->email)->first();
        Log::info('Input dari Form', $request->all());
        $answers = [];
        for ($i = 1; $i <= 52; $i++) {
            $answers["soal{$i}"] = $request->input("soal{$i}", 0);
        }

        Log::info('Answers Array', $answers);
        $indicator_scores = [
            // Pengetahuan Kognitif (Knowledge of Cognition)
            'declarative_knowledge' => array_sum(array_intersect_key($answers, array_flip(['soal5', 'soal10', 'soal12', 'soal16', 'soal17', 'soal20', 'soal32', 'soal46']))),
            'procedural_knowledge' => array_sum(array_intersect_key($answers, array_flip(['soal3', 'soal14', 'soal27', 'soal33']))),
            'conditional_knowledge' => array_sum(array_intersect_key($answers, array_flip(['soal15', 'soal18', 'soal26', 'soal29', 'soal35']))),
            // Pengendalian Kognitif (Regulation of Cognition)
            'planning' => array_sum(array_intersect_key($answers, array_flip(['soal4', 'soal6', 'soal8', 'soal22', 'soal23', 'soal42', 'soal45']))),
            'information_management' => array_sum(array_intersect_key($answers, array_flip(['soal9', 'soal13', 'soal30', 'soal31', 'soal37', 'soal39', 'soal41', 'soal43', 'soal47', 'soal48']))),
            'monitoring' => array_sum(array_intersect_key($answers, array_flip(['soal1', 'soal2', 'soal11', 'soal21', 'soal28', 'soal34', 'soal49']))),
            'debugging' => array_sum(array_intersect_key($answers, array_flip(['soal25', 'soal40', 'soal44', 'soal51', 'soal52']))),
            'evaluation' => array_sum(array_intersect_key($answers, array_flip(['soal7', 'soal19', 'soal24', 'soal36', 'soal38', 'soal50']))),
        ];

        Log::info('Indicator Scores', $indicator_scores);

        $km_total = $indicator_scores['declarative_knowledge'] + $indicator_scores['procedural_knowledge'] + $indicator_scores['conditional_knowledge'];
        $rm_total = $indicator_scores['planning'] + $indicator_scores['information_management'] + $indicator_scores['monitoring'] + $indicator_scores['debugging'] + $indicator_scores['evaluation'];
        $km_class = ($km_total >= 63) ? 'high' : (($km_total >= 42) ? 'med' : 'low');
        $rm_class = ($rm_total >= 132) ? 'high' : (($rm_total >= 88) ? 'med' : 'low');
        $lv_meta = (($rm_class == 'high' && ($km_class == 'high' || $km_class == 'med')) || 
                    ($rm_class == 'med' && ($km_class == 'high' || $km_class == 'med'))) ? 2 : 1;

        $category = 4; // Default
        switch (true) {
            case ($lv_meta == 1 && $km_class == 'low' && $rm_class == 'low'):
                $category = 1;
                break;
            case ($lv_meta == 1 && $km_class == 'low' && $rm_class == 'med'):
                $category = 2;
                break;
            case ($lv_meta == 1 && $km_class == 'low' && $rm_class == 'high'):
                $category = 3;
                break;
            case ($lv_meta == 1 && $km_class == 'mid' && $rm_class == 'low'):
                $category = 4;
                break;
            case ($lv_meta == 2 && $km_class == 'mid' && $rm_class == 'mid'):
                $category = 5;
                break;
            case ($lv_meta == 2 && $km_class == 'mid' && $rm_class == 'high'):
                $category = 6;
                break;
            case ($lv_meta == 2 && $km_class == 'high' && $rm_class == 'mid'):
                $category = 7;
                break;
            case ($lv_meta == 2 && $km_class == 'high' && $rm_class == 'high'):
                $category = 8;
                break;
        }

        if ($user) {
            $user->update(['category_meta' => $category]);
        }

        $kuesionerls = KuesionerLearningStyle::where('email', Auth::user()->email)->first();
        $kuesionermeta = KuesionerMetakognitif::where('category', $user->category_meta)->first();

        Log::info('Hasil Kuesioner MAI', [
            'km_total' => $km_total,
            'rm_total' => $rm_total,
            'km_class' => $km_class,
            'rm_class' => $rm_class,
            'lv_meta' => $lv_meta,
            'category' => $category,
        ]);

        return view('main.page.kuesioner.kuesioner_hasil', compact('kuesionerls', 'kuesionermeta'));
    }
}