<?php
namespace App\Controllers;

use Core\Controller;
use App\Models\Mahasiswa;
use App\Models\KKN;
use App\Models\TokenKKN;

class KKNController extends Controller
{
    public function form()
    {
        $nim = $_SESSION['user']['nim'] ?? null;
        if (!$nim) {
            return $this->view('kkn/daftar', ['error' => 'NIM tidak ditemukan dalam sesi.']);
        }

        $kknModel = new KKN();
        $tokenModel = new TokenKKN();
        $mahasiswaModel = new Mahasiswa();

        $dataKkn = $kknModel->findByNim($nim);

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            if (isset($_POST['token'])) {
                $token = trim($_POST['token']);

                if ($tokenModel->isValid($token)) {
                    // Hapus token agar tidak bisa dipakai lagi
                    $tokenModel->delete($token);

                    $dataMahasiswa = $mahasiswaModel->findByNim($nim);

                    if (!$dataKkn && $dataMahasiswa) {
                        $insert = $kknModel->insertFromMahasiswa($nim, $token);
                        if ($insert) {
                            $_SESSION['success'] = 'Data berhasil dimasukkan.';
                            header('Location: /dashboard/mahasiswa-daftarkkn');
                            exit;
                        } else {
                            $_SESSION['error'] = 'Gagal insert ke KKN.';
                        }
                    } else {
                        $_SESSION['error'] = 'Data KKN sudah ada atau data mahasiswa tidak ditemukan.';
                    }
                } else {
                    $_SESSION['error'] = 'Token tidak valid.';
                }

                // Render view dengan error dan data KKN terakhir
                return $this->view('kkn/daftar', ['error' => $_SESSION['error'], 'data' => $dataKkn]);
            }

            if (isset($_POST['update'])) {
                $update = $kknModel->updateByNim($nim, $_POST);
                if ($update) {
                    $_SESSION['success'] = 'Data berhasil diperbarui.';
                    header('Location: /dashboard/mahasiswa-daftarkkn');
                    exit;
                } else {
                    $_SESSION['error'] = 'Gagal update data.';
                    return $this->view('kkn/daftar', ['error' => $error, 'data' => $dataKkn]);
                }
            }
        }

        $data = ['data' => $dataKkn];

        if (isset($_SESSION['success'])) {
            $data['success'] = $_SESSION['success'];
            unset($_SESSION['success']);
        }

        if (isset($_SESSION['error'])) {
            $data['error'] = $_SESSION['error'];
            unset($_SESSION['error']);
        }

        return $this->view('kkn/daftar', $data);
    }
}
