<?php
/**
 * IBVTE Admin – Marks Entry
 */
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/auth.php';

if (!checkDBConnection()) exit;
Auth()->requireRole(['super_admin', 'admin']);

$db     = DB();
$user   = Auth()->getUser();
$flash  = getFlashMessage();
$action = $_GET['action'] ?? 'list';

$search = cleanInput($_GET['search'] ?? '');
$studentId = isset($_GET['student_id']) ? intval($_GET['student_id']) : 0;

$student = null;
$subjects = [];
$existingMarks = [];

if ($action === 'enter_marks' && $studentId > 0) {
    // Fetch the student
    $student = $db->fetchOne("
        SELECT s.*, c.course_name, u.institution_name 
        FROM students s 
        JOIN courses c ON s.course_id = c.id 
        LEFT JOIN users u ON s.institution_id = u.id 
        WHERE s.id = ?
    ", [$studentId]);

    if ($student) {
        $subjects = $db->fetchAll("SELECT * FROM subjects WHERE course_id = ? ORDER BY type, subject_name", [$student['course_id']]);
        $marksRows = $db->fetchAll("SELECT * FROM marks_entry WHERE student_id = ?", [$student['id']]);
        foreach ($marksRows as $mr) {
            $existingMarks[$mr['subject_id']] = $mr['obtained_marks'];
        }
    } else {
        $flash = ['type' => 'danger', 'message' => 'Student not found.'];
        $action = 'list';
    }
}

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

    $sid = intval($_POST['student_id']);
    
    // No IDOR protection needed since admin can edit any student
    $studentCheck = $db->fetchOne("SELECT id, course_id FROM students WHERE id = ?", [$sid]);
    if (!$studentCheck) {
        redirectWithMessage("marks-entry.php", "Student not found.", "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 = ? AND course_id = ?", [$subId, $studentCheck['course_id']]);
        if (!$sub) continue;

        $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 = ?", 
                    [$sid, $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';
    }

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

    redirectWithMessage("marks-entry.php?action=enter_marks&student_id=$sid", "Marks updated successfully! Status: $division", "success");
}

// Pagination & Listing
if ($action === 'list') {
    $page = max(1, intval($_GET['page'] ?? 1));
    $perPage = 20;
    $offset = ($page - 1) * $perPage;

    $where = " WHERE 1=1 AND s.approval_status = 'approved' ";
    $params = [];

    if (!empty($search)) {
        $where .= " AND (s.full_name LIKE ? OR s.registration_number LIKE ? OR s.roll_number LIKE ? OR u.institution_name LIKE ?)";
        $searchParam = "%$search%";
        $params = array_merge($params, array_fill(0, 4, $searchParam));
    }

    $totalStudents = $db->fetchColumn("
        SELECT COUNT(*) 
        FROM students s
        LEFT JOIN users u ON s.institution_id = u.id
        $where
    ", $params);
    $totalPages = ceil($totalStudents / $perPage);

    $sql = "SELECT s.*, c.course_name, c.course_code, u.institution_name 
            FROM students s
            LEFT JOIN courses c ON s.course_id = c.id
            LEFT JOIN users u ON s.institution_id = u.id
            $where
            ORDER BY s.created_at DESC
            LIMIT $perPage OFFSET $offset";
    $studentsList = $db->fetchAll($sql, $params);
}
?>
<!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:#f4f6f9;font-family:'Inter',sans-serif;font-size:0.9rem;}
    .sidebar{background:var(--primary);min-height:100vh;color:#fff;}
    .sidebar .nav-link{color:rgba(255,255,255,0.8);font-weight:500;padding:0.8rem 1.5rem;}
    .sidebar .nav-link:hover,.sidebar .nav-link.active{color:#fff;background:rgba(255,255,255,0.1);border-radius:6px;}
    .main-content{padding:2rem;}
    .card{border:none;box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075);border-radius:12px;margin-bottom:1.5rem;}
    .card-header{background:#fff;border-bottom:1px solid rgba(0,0,0,0.05);padding:1.5rem;}
    .table th{background:#f8f9fa;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6;}
    .table td{vertical-align:middle;}
</style>
</head>
<body>
<?php include __DIR__ . '/../includes/admin_header.php'; ?>

<div class="container-fluid">
    <div class="row">
        <?php include __DIR__ . '/../includes/admin_sidebar.php'; ?>

        <main class="col-md-9 ms-sm-auto col-lg-10 px-md-4 main-content">
            <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pb-2 mb-3 border-bottom">
                <h1 class="h2">Marks Entry</h1>
                <?php if ($action === 'enter_marks'): ?>
                    <a href="marks-entry.php" class="btn btn-secondary btn-sm"><i class="fas fa-arrow-left"></i> Back to List</a>
                <?php endif; ?>
            </div>

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

            <?php if ($action === 'list'): ?>
                <!-- List Students -->
                <div class="card">
                    <div class="card-header bg-white border-bottom py-3 d-flex justify-content-between align-items-center flex-wrap gap-3">
                        <h5 class="card-title mb-0 fw-bold text-primary"><i class="fas fa-list me-2"></i>Students List</h5>
                        <form class="d-flex gap-2" method="GET" action="marks-entry.php">
                            <div class="input-group input-group-sm" style="width:300px;">
                                <span class="input-group-text bg-light border-end-0"><i class="fas fa-search text-muted"></i></span>
                                <input type="text" name="search" class="form-control border-start-0 ps-0" placeholder="Search by name, roll no, college..." value="<?= htmlspecialchars($search) ?>">
                            </div>
                            <button type="submit" class="btn btn-primary btn-sm px-3 fw-bold">Search</button>
                            <?php if ($search): ?>
                                <a href="marks-entry.php" class="btn btn-light border btn-sm px-3 fw-bold text-muted">Clear</a>
                            <?php endif; ?>
                        </form>
                    </div>
                    <div class="card-body p-0">
                        <div class="table-responsive">
                            <table class="table table-hover align-middle mb-0" style="font-size: 0.95rem;">
                                <thead class="table-light">
                                    <tr>
                                        <th class="ps-4 py-3 text-uppercase small fw-bold text-muted">Student Details</th>
                                        <th class="py-3 text-uppercase small fw-bold text-muted">Roll Number</th>
                                        <th class="py-3 text-uppercase small fw-bold text-muted">College</th>
                                        <th class="py-3 text-uppercase small fw-bold text-muted">Course</th>
                                        <th class="py-3 text-uppercase small fw-bold text-muted">Status</th>
                                        <th class="text-end pe-4 py-3 text-uppercase small fw-bold text-muted">Action</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php if (empty($studentsList)): ?>
                                        <tr><td colspan="6" class="text-center py-5 text-muted"><i class="fas fa-inbox fa-3x mb-3 text-light"></i><br>No students found.</td></tr>
                                    <?php else: ?>
                                        <?php foreach ($studentsList as $st): ?>
                                            <tr>
                                                <td class="ps-4">
                                                    <div class="fw-bold text-dark"><?= htmlspecialchars($st['full_name']) ?></div>
                                                    <div class="small text-muted" style="font-size: 0.8rem;">Reg: <?= htmlspecialchars($st['registration_number']) ?></div>
                                                </td>
                                                <td>
                                                    <?php if($st['roll_number']): ?>
                                                        <span class="badge bg-light text-dark border px-2 py-1" style="font-size: 0.85rem; font-weight: 600;"><?= htmlspecialchars($st['roll_number']) ?></span>
                                                    <?php else: ?>
                                                        <span class="text-muted small fst-italic">Not Assigned</span>
                                                    <?php endif; ?>
                                                </td>
                                                <td>
                                                    <div class="text-truncate" style="max-width: 250px;" title="<?= htmlspecialchars($st['institution_name'] ?? 'N/A') ?>">
                                                        <i class="fas fa-university text-primary me-1 opacity-75"></i> <span class="fw-medium text-dark"><?= htmlspecialchars($st['institution_name'] ?? 'N/A') ?></span>
                                                    </div>
                                                </td>
                                                <td>
                                                    <div class="text-truncate" style="max-width: 200px;" title="<?= htmlspecialchars($st['course_name']) ?>">
                                                        <?= htmlspecialchars($st['course_name']) ?>
                                                    </div>
                                                </td>
                                                <td>
                                                    <?php if ($st['result_declared']): ?>
                                                        <span class="badge bg-success-subtle text-success border border-success-subtle px-2 py-1"><i class="fas fa-check-circle me-1"></i> Result Declared</span>
                                                        <div class="small mt-1 text-muted fw-medium" style="font-size: 0.8rem;">
                                                            <?= number_format($st['percentage'], 2) ?>% 
                                                            <?php if (!empty($st['division'])): ?>
                                                                (<?= htmlspecialchars(ucwords($st['division'])) ?>)
                                                            <?php endif; ?>
                                                        </div>
                                                    <?php else: ?>
                                                        <span class="badge bg-warning-subtle text-warning-emphasis border border-warning-subtle px-2 py-1"><i class="fas fa-clock me-1"></i> Pending</span>
                                                    <?php endif; ?>
                                                </td>
                                                <td class="text-end pe-4">
                                                    <?php if ($st['result_declared']): ?>
                                                        <a href="marks-entry.php?action=enter_marks&student_id=<?= $st['id'] ?>" class="btn btn-sm btn-outline-primary fw-bold px-3 shadow-sm rounded-pill">
                                                            <i class="fas fa-edit me-1"></i> Update Marks
                                                        </a>
                                                    <?php else: ?>
                                                        <a href="marks-entry.php?action=enter_marks&student_id=<?= $st['id'] ?>" class="btn btn-sm btn-primary fw-bold px-3 shadow-sm rounded-pill">
                                                            <i class="fas fa-plus me-1"></i> Enter Marks
                                                        </a>
                                                    <?php endif; ?>
                                                </td>
                                            </tr>
                                        <?php endforeach; ?>
                                    <?php endif; ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                    <?php if (isset($totalPages) && $totalPages > 1): ?>
                        <div class="card-footer bg-white text-end">
                            <nav aria-label="Page navigation">
                                <ul class="pagination pagination-sm justify-content-end mb-0">
                                    <?php for($i=1; $i<=$totalPages; $i++): ?>
                                        <li class="page-item <?= ($page == $i) ? 'active' : '' ?>">
                                            <a class="page-link" href="?page=<?= $i ?><?= $search ? '&search='.urlencode($search) : '' ?>"><?= $i ?></a>
                                        </li>
                                    <?php endfor; ?>
                                </ul>
                            </nav>
                        </div>
                    <?php endif; ?>
                </div>
            <?php endif; ?>

            <?php if ($action === 'enter_marks' && $student): ?>
                <!-- Enter Marks Form -->
                <div class="card border-primary mb-4">
                    <div class="card-body bg-light border-bottom">
                        <div class="row">
                            <div class="col-md-6">
                                <h5 class="text-primary mb-1"><?= htmlspecialchars($student['full_name']) ?></h5>
                                <p class="mb-0 text-muted"><strong>College:</strong> <?= htmlspecialchars($student['institution_name']) ?></p>
                            </div>
                            <div class="col-md-6 text-md-end mt-3 mt-md-0">
                                <p class="mb-1"><strong>Course:</strong> <?= htmlspecialchars($student['course_name']) ?></p>
                                <p class="mb-0"><strong>Roll No:</strong> <?= htmlspecialchars($student['roll_number']) ?> &nbsp;|&nbsp; <strong>Reg No:</strong> <?= htmlspecialchars($student['registration_number']) ?></p>
                            </div>
                        </div>
                    </div>
                    <div class="card-body">
                        <?php if (empty($subjects)): ?>
                            <div class="alert alert-warning">No subjects found for this course. Please add subjects first.</div>
                        <?php else: ?>
                            <form method="POST" action="marks-entry.php">
                                <input type="hidden" name="csrf_token" value="<?= Auth()->generateCSRFToken() ?>">
                                <input type="hidden" name="student_id" value="<?= $student['id'] ?>">

                                <div class="table-responsive">
                                    <table class="table table-bordered align-middle">
                                        <thead class="table-light">
                                            <tr>
                                                <th>Subject Name</th>
                                                <th>Type</th>
                                                <th class="text-center">Max Marks</th>
                                                <th class="text-center">Pass Marks</th>
                                                <th class="text-center" style="width: 200px;">Obtained Marks</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <?php foreach ($subjects as $sub): 
                                                $obtained = $existingMarks[$sub['id']] ?? '';
                                            ?>
                                            <tr>
                                                <td class="fw-bold"><?= htmlspecialchars($sub['subject_name']) ?></td>
                                                <td><span class="badge bg-secondary"><?= ucfirst($sub['type']) ?></span></td>
                                                <td class="text-center"><?= $sub['max_marks'] ?></td>
                                                <td class="text-center text-danger"><?= $sub['pass_marks'] ?></td>
                                                <td>
                                                    <input type="number" name="marks[<?= $sub['id'] ?>]" class="form-control text-center marks-input" 
                                                           min="0" max="<?= $sub['max_marks'] ?>" required
                                                           value="<?= htmlspecialchars($obtained) ?>"
                                                           data-max="<?= $sub['max_marks'] ?>" data-pass="<?= $sub['pass_marks'] ?>">
                                                </td>
                                            </tr>
                                            <?php endforeach; ?>
                                        </tbody>
                                        <tfoot class="table-light fw-bold">
                                            <tr>
                                                <td colspan="2" class="text-end">Total:</td>
                                                <td class="text-center" id="totalMax">0</td>
                                                <td></td>
                                                <td class="text-center text-primary fs-5" id="totalObtained">0</td>
                                            </tr>
                                        </tfoot>
                                    </table>
                                </div>
                                <div class="text-end mt-3">
                                    <button type="submit" name="save_marks" class="btn btn-success px-4 fw-bold shadow-sm">
                                        <i class="fas fa-save me-1"></i> Save Marks & Declare Result
                                    </button>
                                </div>
                            </form>
                        <?php endif; ?>
                    </div>
                </div>
            <?php endif; ?>
        </main>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
    const inputs = document.querySelectorAll('.marks-input');
    const tObtained = document.getElementById('totalObtained');
    const tMax = document.getElementById('totalMax');

    function calcTotals() {
        let obtained = 0;
        let maxm = 0;
        inputs.forEach(inp => {
            obtained += (parseInt(inp.value) || 0);
            maxm += (parseInt(inp.getAttribute('data-max')) || 0);
        });
        if(tObtained) tObtained.textContent = obtained;
        if(tMax) tMax.textContent = maxm;
    }

    if(inputs.length > 0) {
        calcTotals();
        inputs.forEach(inp => inp.addEventListener('input', calcTotals));
    }
});
</script>
</body>
</html>
