<?php
namespace App\Controllers;

use Core\Controller;
use App\Models\Mahasiswa;
use App\Models\SidangModel;
use App\Models\Token;
use App\Models\TokenSidang;

class SidangController extends Controller
{
    // Menangani request GET untuk menampilkan form sidang
    public function index()
    {
        $nim = $_SESSION['user']['nim'] ?? null;

        if (!$nim) {
            header('Location: /login');
            exit;
        }

        $sidangModel = new SidangModel();
        $mahasiswaModel = new Mahasiswa();
        $tokenSidangModel = new TokenSidang();

        $data_sidang = $sidangModel->getSidangByNIM($nim);

        // Jika sudah daftar sidang, tampilkan info formulir cetak
        if ($data_sidang) {
            return $this->view('sidang/form_sidang', [
                'nim' => $nim,
                'data_sidang' => $data_sidang,
                'form_submitted' => false,
                'token_required' => false
            ]);
        }

        // Cek apakah token sidang sudah pernah dipakai oleh mahasiswa
        $tokenExists = $tokenSidangModel->getTokenSkripsiByNIM($nim);

        if (!$tokenExists) {
            // Token belum ada, harus input token dulu
            return $this->view('sidang/form_sidang', [
                'nim' => $nim,
                'token_required' => true,
                'form_submitted' => false
            ]);
        }

        // Jika token sudah ada, tampilkan form pendaftaran sidang
        $mahasiswa = $mahasiswaModel->findByNim($nim);
        $ttl = $mahasiswa['tmpt_lahir'] . ', ' . $this->formatTanggalIndonesia($mahasiswa['tgl_lahir']);

        return $this->view('sidang/form_sidang', [
            'nim' => $nim,
            'nama' => $mahasiswa['nama'],
            'prodi' => $mahasiswa['id_prodi'] == 86206 ? 'PGSD' : 'PGPAUD',
            'alamat' => $mahasiswa['alamat'],
            'ttl' => $ttl,
            'form_submitted' => true,
            'token_required' => false
        ]);
    }

    // Menangani request POST untuk proses token atau pendaftaran sidang
    public function daftarSkripsi()
    {
        $nim = $_SESSION['user']['nim'] ?? null;
        if (!$nim) {
            header('Location: /login');
            exit;
        }

        $sidangModel = new SidangModel();
        $mahasiswaModel = new Mahasiswa();
        $tokenModel = new Token();
        $tokenSidangModel = new TokenSidang();

        $postData = $_POST;

        // Jika ada token, proses validasi token dan simpan token sidang
        if (!empty($postData['token'])) {
            $token = $postData['token'];
            $tokenData = $tokenModel->getTokenSidang($token, 'Sidang Skripsi');

            if ($tokenData) {
                // Insert token sidang
                $tokenSidangModel->insertTokenSkripsi([
                    'token' => $token,
                    'nim' => $nim,
                    'tgl_input' => date('Y-m-d')
                ]);

                // Hapus token dari tabel token
                $tokenModel->deleteToken($tokenData['id_token']);

                header('Location: /dashboard/mahasiswa-daftarskripsi');
                exit;
            } else {
                // Token tidak valid
                return $this->view('sidang/form_sidang', [
                    'nim' => $nim,
                    'error' => 'Token tidak valid atau sudah digunakan.',
                    'form_submitted' => false,
                    'token_required' => true
                ]);
            }
        } else {
            // Jika token sudah ada, proses pendaftaran sidang
            $mahasiswa = $mahasiswaModel->findByNim($nim);
            $ttl = $mahasiswa['tmpt_lahir'] . ', ' . $this->formatTanggalIndonesia($mahasiswa['tgl_lahir']);

            // Validasi input minimal bisa ditambahkan di sini

            $sidangModel->insertSidang([
                'nim' => $nim,
                'nama' => $mahasiswa['nama'],
                'prodi' => $mahasiswa['id_prodi'] == 86206 ? 'PGSD' : 'PGPAUD',
                'nik' => $postData['nik'],
                'ttl' => $ttl,
                'alamat' => $mahasiswa['alamat'],
                'judul' => $postData['judul'],
                'pembimbing1' => $postData['pembimbing1'],
                'pembimbing2' => $postData['pembimbing2']
            ]);

            header('Location: /dashboard/mahasiswa-daftarskripsi');
            exit;
        }
    }
	
	public function updatesidang()
	{
		$nim = $_SESSION['user']['nim'] ?? null;
		if (!$nim) {
			header('Location: /login');
			exit;
		}

		$sidangModel = new SidangModel();

		$postData = $_POST;

		// Validasi sederhana (bisa dikembangkan lagi)
		if (
			empty($postData['nik']) || strlen($postData['nik']) !== 16 ||
			empty($postData['ttl']) ||
			empty($postData['alamat']) ||
			empty($postData['judul']) ||
			empty($postData['pembimbing1']) ||
			empty($postData['pembimbing2'])
		) {
			$_SESSION['error'] = "Semua kolom harus diisi dengan benar.";
			header("Location: /dashboard/mahasiswa-daftarskripsi");
			exit;
		}

		// Proses update
		$updated = $sidangModel->updateSidang([
			'nim' => $nim,
			'nik' => $postData['nik'],
			'ttl' => $postData['ttl'],
			'alamat' => $postData['alamat'],
			'judul' => $postData['judul'],
			'pembimbing1' => $postData['pembimbing1'],
			'pembimbing2' => $postData['pembimbing2']
		]);

		if ($updated) {
			$_SESSION['success'] = "Data sidang berhasil diperbarui.";
		} else {
			$_SESSION['error'] = "Gagal memperbarui data. Silakan coba lagi.";
		}

		header("Location: /dashboard/mahasiswa-daftarskripsi");
		exit;
	}


    private function formatTanggalIndonesia($tanggal)
    {
        $bulanIndo = [
            '01' => 'Januari',
            '02' => 'Februari',
            '03' => 'Maret',
            '04' => 'April',
            '05' => 'Mei',
            '06' => 'Juni',
            '07' => 'Juli',
            '08' => 'Agustus',
            '09' => 'September',
            '10' => 'Oktober',
            '11' => 'November',
            '12' => 'Desember'
        ];

       $parts = explode('-', $tanggal ?? '');
        if (count($parts) === 3) {
            return $parts[2] . ' ' . $bulanIndo[$parts[1]] . ' ' . $parts[0];
        } else {
            return $tanggal;
        }
    }
	
	public function searchDosen()
	{
		ob_clean(); // bersihkan output buffer

		$keyword = $_GET['keyword'] ?? '';

		if (!$keyword) {
			header('Content-Type: application/json');
			echo json_encode([]);
			exit;
		}

		$sidangModel = new \App\Models\SidangModel();
		$results = $sidangModel->searchDosenByName($keyword);

		$names = array_map(fn($row) => $row['nama'], $results);

		header('Content-Type: application/json');
		echo json_encode($names);
		exit;
	}

}
