<?php
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/auth.php';

Auth()->requireRole(['college']);
$db = DB();
$user = Auth()->getUser();
$flash = getFlashMessage();

$search = cleanInput($_GET['search'] ?? '');
$student = null;
$subjects = [];

if ($search) {
    $student = $db->fetchOne("SELECT s.*, c.course_name FROM students s JOIN courses c ON s.course_id = c.id WHERE (s.registration_number = ? OR s.roll_number = ?) AND s.institution_id = ?", [$search, $search, $user['id']]);
    if ($student) {
        $subjects = $db->fetchAll("SELECT * FROM subjects WHERE course_id = ? ORDER BY type, subject_name", [$student['course_id']]);
    } else {
        $flash = ['type' => 'danger', 'message' => 'Student not found or not registered with your college.'];
    }
}

// Save Marks
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_marks'])) {
    // CSRF Protection
    if (!Auth()->verifyCSRFToken($_POST['csrf_token'] ?? '')) {
        redirectWithMessage("marks-entry.php?search=$search", "Security session expired. Please try again.", "danger");
    }

    $studentId = intval($_POST['student_id']);
    
    // IDOR Protection: Verify student belongs to this college
    $studentCheck = $db->fetchOne("SELECT id FROM students WHERE id = ? AND institution_id = ?", [$studentId, $user['id']]);
    if (!$studentCheck) {
        redirectWithMessage("marks-entry.php", "Unauthorized access. You can only enter marks for your own students.", "danger");
    }

    $marks = $_POST['marks']; // Array: [subject_id => obtained_marks]

    $totalMax = 0;
    $totalObtained = 0;
    $isFail = false;

    foreach ($marks as $subId => $obtained) {
        $sub = $db->fetchOne("SELECT * FROM subjects WHERE id = ?", [$subId]);
        $obtained = intval($obtained);
        
        if ($obtained > $sub['max_marks']) $obtained = $sub['max_marks'];
        if ($obtained < $sub['pass_marks']) $isFail = true;

        $totalMax += $sub['max_marks'];
        $totalObtained += $obtained;

        // Upsert marks
        $db->query("INSERT INTO marks_entry (student_id, subject_id, obtained_marks) 
                    VALUES (?, ?, ?) 
                    ON DUPLICATE KEY UPDATE obtained_marks = ?", 
                    [$studentId, $subId, $obtained, $obtained]);
    }

    $percentage = ($totalMax > 0) ? ($totalObtained / $totalMax) * 100 : 0;
    $division = 'Fail';
    if (!$isFail) {
        if ($percentage >= 60) $division = '1st Division';
        elseif ($percentage >= 45) $division = '2nd Division';
        elseif ($percentage >= 33) $division = '3rd Division';
    } else {
        $division = 'FAIL';
    }

    // Update student summary
    $db->update('students', [
        'marks_obtained' => $totalObtained,
        'total_marks' => $totalMax,
        'percentage' => $percentage,
        'division' => $division,
        'result_declared' => 1,
        'status' => ($division == 'FAIL') ? 'failed' : 'passed'
    ], ['id' => $studentId]);

    redirectWithMessage("marks-entry.php?search=$search", "Marks updated successfully! Status: $division", "success");
}

// Fetch existing marks
$existingMarks = [];
if ($student) {
    $marksRows = $db->fetchAll("SELECT * FROM marks_entry WHERE student_id = ?", [$student['id']]);
    foreach ($marksRows as $mr) {
        $existingMarks[$mr['subject_id']] = $mr['obtained_marks'];
    }
}
?>
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Marks Entry – <?= APP_SHORT_NAME ?></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<style>
    :root{--primary:#3b0b7c;--secondary:#6c4ab6;}
    body{background:#f8f9fa;}
    .college-sidebar{width:250px;background:white;min-height:100vh;position:fixed;box-shadow:3px 0 15px rgba(0,0,0,.05);}
    .college-main{margin-left:250px;padding:30px;}
    .card{border:none;border-radius:15px;box-shadow:0 4px 15px rgba(0,0,0,.05);}
    .subject-row:hover{background:#fcfaff;}
</style>
</head><body>

<?php include __DIR__ . '/../includes/college_sidebar.php'; ?>

<div class="college-main">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h3 class="fw-bold text-primary"><i class="fas fa-edit me-2"></i>Marks Entry</h3>
    </div>

    <?php if($flash):?><div class="alert alert-<?=$flash['type']?> alert-dismissible fade show"><?= htmlspecialchars($flash['message']) ?><button class="btn-close" data-bs-dismiss="alert"></button></div><?php endif;?>

    <!-- Search Section -->
    <div class="card p-4 mb-4">
        <form method="GET" class="row g-3 align-items-end">
            <div class="col-md-8">
                <label class="small fw-bold">Search Student by Registration Number or Roll Number</label>
                <div class="input-group">
                    <span class="input-group-text bg-white"><i class="fas fa-search text-muted"></i></span>
                    <input type="text" name="search" class="form-control" placeholder="Enter Registration / Roll No..." value="<?= htmlspecialchars($search) ?>" required>
                </div>
            </div>
            <div class="col-md-4">
                <button type="submit" class="btn btn-primary w-100 fw-bold">Search Student</button>
            </div>
        </form>
    </div>

    <?php if($student): ?>
    <div class="card mb-4 border-start border-primary border-5">
        <div class="card-body p-4">
            <div class="row">
                <div class="col-md-2 text-center">
                    <img src="../<?= $student['photo_path'] ?? 'assets/img/avatar.png' ?>" class="rounded shadow-sm border" style="width:100px;height:120px;object-fit:cover;">
                </div>
                <div class="col-md-5">
                    <h5 class="fw-bold mb-1"><?= htmlspecialchars($student['full_name']) ?></h5>
                    <p class="text-muted small mb-1"><i class="fas fa-id-card me-2"></i>Reg: <?= htmlspecialchars($student['registration_number']) ?> | Roll: <?= htmlspecialchars($student['roll_number'] ?? 'N/A') ?></p>
                    <p class="text-muted small mb-0"><i class="fas fa-book me-2"></i><?= htmlspecialchars($student['course_name']) ?></p>
                </div>
                <div class="col-md-5 text-md-end">
                    <span class="badge bg-<?= $student['result_declared']?'success':'warning' ?> p-2 px-3">
                        <?= $student['result_declared'] ? 'Result Declared: ' . $student['division'] : 'Awaiting Marks Entry' ?>
                    </span>
                    <div class="mt-2">
                        <a href="print-result.php?id=<?= $student['id'] ?>" class="btn btn-sm btn-outline-dark" target="_blank"><i class="fas fa-print me-1"></i>Print Marksheet</a>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <form method="POST">
        <input type="hidden" name="csrf_token" value="<?= Auth()->generateCSRFToken() ?>">
        <input type="hidden" name="save_marks" value="1">
        <input type="hidden" name="student_id" value="<?= $student['id'] ?>">

        <div class="card overflow-hidden">
            <div class="table-responsive">
                <table class="table table-bordered align-middle mb-0">
                    <thead class="bg-light text-center">
                        <tr>
                            <th width="80">S.No</th>
                            <th class="text-start">Subject Name</th>
                            <th width="120">Type</th>
                            <th width="120">Max Marks</th>
                            <th width="120">Pass Marks</th>
                            <th width="180">Obtained Marks</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if(empty($subjects)): ?>
                            <tr><td colspan="6" class="text-center py-5 text-muted">No subjects configured for this course. Please contact Admin.</td></tr>
                        <?php else: ?>
                            <?php 
                            $tMax = 0; $tPass = 0; $tObt = 0;
                            foreach($subjects as $i => $s): 
                                $obtVal = $existingMarks[$s['id']] ?? '';
                                $tMax += $s['max_marks'];
                                $tPass += $s['pass_marks'];
                                $tObt += intval($obtVal);
                            ?>
                            <tr class="subject-row">
                                <td class="text-center text-muted small"><?= $i+1 ?></td>
                                <td class="fw-bold"><?= htmlspecialchars($s['subject_name']) ?></td>
                                <td class="text-center"><span class="badge bg-<?= $s['type']=='Theory'?'primary':'info' ?> small"><?= $s['type'] ?></span></td>
                                <td class="text-center fw-bold"><?= $s['max_marks'] ?></td>
                                <td class="text-center text-danger fw-bold"><?= $s['pass_marks'] ?></td>
                                <td class="p-1">
                                    <input type="number" name="marks[<?= $s['id'] ?>]" 
                                           class="form-control border-0 text-center fw-bold bg-transparent" 
                                           max="<?= $s['max_marks'] ?>" 
                                           placeholder="Enter Marks" 
                                           value="<?= $obtVal ?>" 
                                           required>
                                </td>
                            </tr>
                            <?php endforeach; ?>
                            <tr class="bg-light fw-bold h5">
                                <td colspan="3" class="text-end">GRAND TOTAL:</td>
                                <td class="text-center text-primary"><?= $tMax ?></td>
                                <td class="text-center text-danger"><?= $tPass ?></td>
                                <td class="text-center text-success"><?= $tObt ?></td>
                            </tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
            <div class="card-footer p-3 text-end bg-white border-0">
                <button type="submit" class="btn btn-primary btn-lg px-5 fw-bold shadow">
                    <i class="fas fa-save me-2"></i>Update & Declare Result
                </button>
            </div>
        </div>
    </form>
    <?php endif; ?>

    <div class="mt-5 text-center text-muted small">
        <p>For verification - Send documents to <strong>info@ibvte.com</strong></p>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body></html>
