<?php
namespace App\Controllers;

use Core\Database;
use PDO;

class UjianController {
	public function index()
	{
		if (!isset($_SESSION['user'])) {
			header('Location: /login');
			exit;
		}

		$level = strtolower($_SESSION['user']['level'] ?? '');
		if ($level !== 'mahasiswa') {
			header('Location: /dashboard');
			exit;
		}

		$nim = $_SESSION['user']['nim'] ?? null;
		$db = Database::getConnection();

		// Tambahkan ini:
		$tahunAktif = $db->query("SELECT tahun_akademik FROM tb_akademik WHERE status = 'aktif' LIMIT 1")->fetchColumn();

		// Jenis soal aktif (UAS / UTS)
		$jenisSoalAktif = $db->query("SELECT jenis_soal FROM tb_jenis_soal WHERE status = 'aktif' LIMIT 1")->fetchColumn();

		// Cek apakah mahasiswa sudah pernah memasukkan token
		$stmt = $db->prepare("SELECT * FROM tb_token_ujian WHERE nim = ? AND tahun_akademik = ? AND jenis_soal= ? ");
		$stmt->execute([$nim, $tahunAktif, $jenisSoalAktif]);
		$tokenUsed = $stmt->fetch(PDO::FETCH_ASSOC);

		if (!$tokenUsed) {
			// Belum input token
			include_once __DIR__ . '/../Views/ujian/form_token.php';
		} else {
			
			// Cari jadwal ujian aktif untuk mahasiswa berdasarkan jenis soal
            $jadwal = $db->prepare("
                SELECT 
                    ju.id_jadwal_u,
                    mk.nama_mk,
                    krs.kode_mk,
                    ju.jenis_soal,
                    ju.tgl_berakhir,
                    ju.jam_berakhir
                FROM tb_krs krs
                /* cari kelas aktif mahasiswa */
                JOIN tb_kelas tk 
                    ON  tk.nim            = krs.nim
                    AND tk.tahun_akademik = krs.tahun_akademik
                    AND tk.status         = 'Aktif'            /* opsional, jika Anda pakai status */
                /* cocokkan dosen-mata kuliah-kelas persis milik mahasiswa */
                JOIN tb_dosen_mk dmk 
                    ON  dmk.kode_mk       = krs.kode_mk
                    AND dmk.kode_kelas    = tk.kode_kelas
                    AND dmk.tahun_akademik= krs.tahun_akademik
                /* jadwal ujian diambil dari id_dmk yang sudah presisi */
                JOIN tb_jadwal_ujian ju 
                    ON  ju.id_dmk         = dmk.id_dmk
                    AND ju.tahun_akademik = krs.tahun_akademik
                JOIN tb_mk mk 
                    ON  mk.kode_mk        = krs.kode_mk
                WHERE krs.nim            = ?              -- mahasiswa
                  AND krs.tahun_akademik = ?              -- tahun aktif
                  AND ju.jenis_soal      = ?              -- UTS / UAS
                  AND NOW() BETWEEN 
                        STR_TO_DATE(CONCAT(ju.tgl_mulai_ujian, ' ', ju.jam_mulai ), '%Y-%m-%d %H:%i:%s')
                    AND STR_TO_DATE(CONCAT(ju.tgl_berakhir   , ' ', ju.jam_berakhir), '%Y-%m-%d %H:%i:%s')
            ");
            
            $jadwal->execute([$nim, $tahunAktif, $jenisSoalAktif]);
            $dataJadwal = $jadwal->fetchAll(PDO::FETCH_ASSOC);

			include_once __DIR__ . '/../Views/ujian/list_ujian.php';
		}
	}


    public function verifikasiToken() {
        if (!isset($_SESSION['user'])) {
            header('Location: /login');
            exit;
        }

        $level = strtolower($_SESSION['user']['level'] ?? '');
        if ($level !== 'mahasiswa') {
            header('Location: /dashboard');
            exit;
        }

        $tokenInput = $_POST['token'] ?? '';
        $nim = $_SESSION['user']['username'];
        $db = Database::getConnection();

        $tahunAktif = $db->query("SELECT tahun_akademik FROM tb_akademik WHERE status = 'aktif' LIMIT 1")->fetchColumn();

        // Cek token tersedia atau tidak
        $stmt = $db->prepare("SELECT * FROM tb_token WHERE token = ? AND kegiatan='UAS/UTS' ");
        $stmt->execute([$tokenInput]);
        $token = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($token) {
			$jenisSoalAktif = $db->query("SELECT jenis_soal FROM tb_jenis_soal WHERE status = 'aktif' LIMIT 1")->fetchColumn();
            // Simpan ke tb_token_ujian
            $insert = $db->prepare("INSERT INTO tb_token_ujian (token, nim, status, jenis_soal, tahun_akademik) VALUES (?, ?, ?, ?, ?)");
            $insert->execute([$token['token'], $nim, 'used', $jenisSoalAktif, $tahunAktif]);

            // Hapus token agar tidak bisa dipakai lagi
            $delete = $db->prepare("DELETE FROM tb_token WHERE token = ?");
            $delete->execute([$token['token']]);

            header('Location: /dashboard/mahasiswa-soal');
            exit;
        } else {
            $_SESSION['error'] = 'Token tidak valid atau sudah digunakan.';
            header('Location: /dashboard/mahasiswa-soal');
            exit;
        }
    }
}
