<?php
namespace App\Controllers;

use Core\Controller;

class KompreController extends Controller {
    private $ujianModel;

    public function __construct() {
        // Pastikan user sudah login dan punya nim di session
        if (!isset($_SESSION['user']['nim'])) {
            header('Location: /login'); // Ganti dengan route login kamu
            exit;
        }

        $this->ujianModel = $this->model('UjianKompre');
    }

    public function index() {
        $nim = $_SESSION['user']['nim'];
    
        // 1️⃣ Cek apakah sudah pernah ujian
        $ujian = $this->ujianModel->getUjianByNim($nim);
        if ($ujian && $ujian['waktu_selesai'] !== null) {
            $_SESSION['id_ujian'] = $ujian['id_ujiankompre'];
            $hasil = $this->ujianModel->getHasil($ujian['id_ujiankompre']);
            $this->view('kompre/hasil_ujian', ['hasil' => $hasil]);
            return;
        }
    
        // 2️⃣ Cek apakah sudah punya token
        $token = $this->ujianModel->cekTokenMahasiswa($nim);
    
        if ($token) {
    
            // Ambil id ujian terbaru
            $ujian = $this->ujianModel->getUjianByNim($nim);
            if ($ujian) {
                $_SESSION['id_ujian'] = $ujian['id_ujiankompre'];
            }
    
            // 🔥 Cek status kompre
            $statusKompre = $this->ujianModel->cekStatusKompre();
    
            if (!$statusKompre || $statusKompre['status'] !== 'Aktif') {
                // Jangan minta token lagi!
                $_SESSION['toast'] = "Kompre belum dibuka.";
                $this->view('kompre/menunggu'); // Buat halaman menunggu
                return;
            }
    
            // Kalau aktif → tampilkan soal
            $soal = $this->ujianModel->getSoal($nim);
            $this->view('kompre/soal_ujian', ['soal' => $soal]);
            return;
        }
    
        // 3️⃣ Jika belum punya token
        $this->view('kompre/input_token');
    }

    public function mulai() {
        $tokenInput = $_POST['token'] ?? null;
        $nim = $_SESSION['user']['nim'] ?? null;
    
        if (!$nim) {
            echo "Anda harus login dulu.";
            return;
        }
    
        //  1. Cek apakah mahasiswa sudah pernah input token di tb_token_kompre
        $tokenAda = $this->ujianModel->cekTokenMahasiswa($nim);
        if ($tokenAda) {
            // Sudah ada token, langsung ambil id ujian
            $ujian = $this->ujianModel->getUjianByNim($nim);
            $_SESSION['id_ujian'] = $ujian['id_ujiankompre'] ?? null;
    
            header('Location: /dashboard/mahasiswa-reg-kompre/hasil');
            exit;
        }
    
        //2. Validasi token yang dimasukkan
        $tokenValid = $this->ujianModel->cekTokenDiTbToken($tokenInput);
        if (!$tokenValid) {
            echo "Token tidak valid atau sudah digunakan.";
            return;
        }
    
        //3. Simpan token ke tb_token_kompre
        $this->ujianModel->insertTokenKompre($nim, $tokenInput);
    
        //4. Hapus token dari tb_token (supaya tidak dipakai ulang)
        $this->ujianModel->hapusToken($tokenInput);
    
        //5. Buat ujian baru di tb_ujiankompre
        // SEBELUMNYA: $id_mahasiswa = $this->ujianModel->getMahasiswaByNim($nim);
        // itu salah, karena return array.
        $id_ujian = $this->ujianModel->buatUjian($nim);
    
        //6. Simpan id ujian ke session
        $_SESSION['id_ujian'] = $id_ujian;
    
        //7. Redirect ke halaman soal
        header('Location: /dashboard/mahasiswa-reg-kompre/soal');
        exit;
    }



    public function soal() {
    
        if (!isset($_SESSION['id_ujian'])) {
            header('Location: /dashboard/mahasiswa-reg-kompre');
            exit;
        }
    
        $statusKompre = $this->ujianModel->cekStatusKompre();
    
        if (!$statusKompre || $statusKompre['status'] !== 'Aktif') {
            $_SESSION['toast'] = "Kompre belum dibuka.";
            header('Location: /dashboard/mahasiswa-reg-kompre');
            exit;
        }
    
        $nim = $_SESSION['user']['nim'];
        $soal = $this->ujianModel->getSoal($nim);
    
        $this->view('kompre/soal_ujian', ['soal' => $soal]);
    }

    public function simpanJawaban() {
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_SESSION['id_ujian'])) {
            $id_ujian = $_SESSION['id_ujian'];
    
            // Simpan semua jawaban yang dikirim
            foreach ($_POST['jawaban'] as $id_soal => $jawaban) {
                $this->ujianModel->simpanJawaban($id_ujian, $id_soal, $jawaban);
            }
    
            // 🔥 Tandai ujian selesai + otomatis hitung skor di model
            $this->ujianModel->selesaikanUjian($id_ujian);
    
            // Hapus session id_ujian (opsional)
            unset($_SESSION['id_ujian']);
    
            // Redirect ke hasil ujian
            header('Location: /dashboard/mahasiswa-reg-kompre/hasil');
            exit;
        } else {
            header('Location: /dashboard/mahasiswa-reg-kompre');
            exit;
        }
    }

    public function hasil() {
        if (!isset($_SESSION['id_ujian'])) {
            // Kalau id_ujian tidak ada, redirect ke input token atau dashboard
            header('Location: /dashboard/mahasiswa-reg-kompre');
            exit;
        }

        $id_ujian = $_SESSION['id_ujian'];
        $hasil = $this->ujianModel->getHasil($id_ujian);

        $this->view('kompre/hasil_ujian', ['hasil' => $hasil]);
    }
}
