<?php
// File: manage_student_results.php
// Bulk-edit student result records.
// Accessible to any logged-in user (staff + admin).

error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);

date_default_timezone_set('Africa/Lagos');

require_once 'auth.php';
Auth::secureSessionStart();

$auth = new Auth();

// ============================================================
// AUTH — any logged-in user can access
// ============================================================
if (!$auth->isLoggedIn()) {
    header('Location: index.php');
    exit;
}

$isAdmin = $auth->isAdmin();   // still useful for display purposes only

require_once 'config.php';
$pdo = getDBConnection();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

// ============================================================
// AUDIT HELPER
// ============================================================
function logStudentResultsAction($auth, $actionType, $context = []) {
    if (!$auth) return;
    try {
        $actorId   = $_SESSION['user_id']  ?? null;
        $actorName = $_SESSION['username'] ?? 'Unknown';

        $desc = "Actor {$actorName} performed {$actionType} on manage_student_results.php";

        if (!empty($context)) {
            $parts = [];
            foreach ($context as $k => $v) {
                $parts[] = "{$k}: " . (is_scalar($v) ? $v : json_encode($v));
            }
            $desc .= " | " . implode(' | ', $parts);
        }

        $auth->logActivity($actorId, $actionType, $desc);
    } catch (Throwable $e) {
        error_log("logStudentResultsAction failed: " . $e->getMessage());
    }
}

// ============================================================
// HANDLE BULK UPDATE — all logged-in users
// ============================================================
$update_message = '';
$update_error = '';
$updated_count = 0;

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['bulk_update'])) {
    $row_ids = $_POST['row_ids'] ?? [];
    $row_ids = array_filter(array_map('intval', $row_ids));

    if (empty($row_ids)) {
        $update_error = "No rows selected for update.";
    } else {
        $updateFields = [];
        $params = [];

        $newRegNum = trim($_POST['new_regnum'] ?? '');
        if ($newRegNum !== '') {
            $updateFields[] = "RegNum = :regnum";
            $params[':regnum'] = $newRegNum;
        }

        $newExamType = trim($_POST['new_exam_type'] ?? '');
        if ($newExamType !== '' && in_array($newExamType, ['WAEC', 'NECO', 'GCE', 'NABTEB'])) {
            $updateFields[] = "ExamType = :exam_type";
            $params[':exam_type'] = $newExamType;
        }

        $newSittingType = trim($_POST['new_sitting_type'] ?? '');
        if ($newSittingType !== '') {
            $updateFields[] = "sitting_type = :sitting_type";
            $params[':sitting_type'] = $newSittingType;
        }

        $newExamNumber = trim($_POST['new_exam_number'] ?? '');
        if ($newExamNumber !== '') {
            $updateFields[] = "ExamNumber = :exam_number";
            $params[':exam_number'] = $newExamNumber;
        }

        if (empty($updateFields)) {
            $update_error = "No update fields specified. Please fill at least one field.";
        } else {
            try {
                $placeholders = [];
                foreach ($row_ids as $i => $id) {
                    $placeholders[] = ":id_$i";
                    $params[":id_$i"] = $id;
                }

                $sql = "UPDATE student_results_data SET " . implode(', ', $updateFields)
                     . " WHERE id IN (" . implode(',', $placeholders) . ")";

                $stmt = $pdo->prepare($sql);
                $stmt->execute($params);
                $updated_count = $stmt->rowCount();

                $update_message = "✅ Successfully updated <strong>$updated_count</strong> record(s).";

                logStudentResultsAction($auth, 'bulk_result_update', [
                    'rows_updated'   => $updated_count,
                    'row_ids'        => implode(',', array_slice($row_ids, 0, 20)) . (count($row_ids) > 20 ? ' …' : ''),
                    'new_regnum'     => $newRegNum ?: '(unchanged)',
                    'new_exam_type'  => $newExamType ?: '(unchanged)',
                    'new_sitting'    => $newSittingType ?: '(unchanged)',
                    'new_exam_no'    => $newExamNumber ?: '(unchanged)',
                ]);
            } catch (PDOException $e) {
                $update_error = "Update failed: " . $e->getMessage();
                error_log("Bulk update failed: " . $e->getMessage());
            }
        }
    }
}

// ============================================================
// FETCH FILTERS
// ============================================================
$filter_regnum       = trim($_GET['filter_regnum'] ?? '');
$filter_subject      = trim($_GET['filter_subject'] ?? '');
$filter_exam_type    = trim($_GET['filter_exam_type'] ?? '');
$filter_sitting_type = trim($_GET['filter_sitting_type'] ?? '');
$filter_student_id   = trim($_GET['filter_student_id'] ?? '');
$filter_app_num      = trim($_GET['filter_app_num'] ?? '');

$where = [];
$params = [];

if ($filter_regnum !== '') {
    $where[] = "r.RegNum LIKE :regnum";
    $params[':regnum'] = '%' . $filter_regnum . '%';
}
if ($filter_subject !== '') {
    $where[] = "r.SubjectName LIKE :subject";
    $params[':subject'] = '%' . $filter_subject . '%';
}
if ($filter_exam_type !== '') {
    $where[] = "r.ExamType = :exam_type";
    $params[':exam_type'] = $filter_exam_type;
}
if ($filter_sitting_type !== '') {
    $where[] = "r.sitting_type = :sitting_type";
    $params[':sitting_type'] = $filter_sitting_type;
}
if ($filter_student_id !== '') {
    $where[] = "r.student_id = :student_id";
    $params[':student_id'] = $filter_student_id;
}
if ($filter_app_num !== '') {
    $where[] = "s.AppNum LIKE :app_num";
    $params[':app_num'] = '%' . $filter_app_num . '%';
}

$whereSql = empty($where) ? '' : ('WHERE ' . implode(' AND ', $where));

// ============================================================
// FETCH ROWS
// ============================================================
$limit = 500;
$sql = "
    SELECT 
        r.id,
        r.student_id,
        r.RegNum,
        r.SubjectName,
        r.Grade,
        r.ExamType,
        r.ExamNumber,
        r.sitting_type,
        r.created_at,
        s.AppNum,
        s.Surname,
        s.Firstname,
        s.Othername
    FROM student_results_data r
    LEFT JOIN students_data s ON r.student_id = s.id
    $whereSql
    ORDER BY r.RegNum ASC, r.ExamType ASC, r.SubjectName ASC
    LIMIT $limit
";

$rows = [];
$fetch_error = '';
try {
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // ✅ Audit log: page view
    logStudentResultsAction($auth, 'page_viewed_student_results', [
        'Filter RegNum'   => $filter_regnum   ?: '(none)',
        'Filter AppNum'   => $filter_app_num  ?: '(none)',
        'Filter Subject'  => $filter_subject  ?: '(none)',
        'Filter ExamType' => $filter_exam_type ?: '(none)',
        'Filter Student'  => $filter_student_id ?: '(none)',
        'Rows returned'   => count($rows),
    ]);
} catch (PDOException $e) {
    $fetch_error = "Query error: " . $e->getMessage();
    error_log("Fetch error: " . $e->getMessage());
}

// ============================================================
// DISTINCT VALUES (for filters)
// ============================================================
$distinctExamTypes = [];
try {
    $stmt = $pdo->query("SELECT DISTINCT ExamType FROM student_results_data ORDER BY ExamType");
    $distinctExamTypes = $stmt->fetchAll(PDO::FETCH_COLUMN);
} catch (PDOException $e) {}

$distinctSittingTypes = [];
try {
    $stmt = $pdo->query("SELECT DISTINCT sitting_type FROM student_results_data WHERE sitting_type IS NOT NULL ORDER BY sitting_type");
    $distinctSittingTypes = $stmt->fetchAll(PDO::FETCH_COLUMN);
} catch (PDOException $e) {}

$distinctSubjects = [];
try {
    $stmt = $pdo->query("SELECT DISTINCT SubjectName FROM student_results_data ORDER BY SubjectName LIMIT 200");
    $distinctSubjects = $stmt->fetchAll(PDO::FETCH_COLUMN);
} catch (PDOException $e) {}

function escHtml($t) {
    return htmlspecialchars($t ?? '', ENT_QUOTES, 'UTF-8');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Manage Student Results</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
    <style>
        body { background:#f5f7fb; font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif; font-size:0.85rem; }
        .main-content { margin-left:280px; padding:25px; transition:all 0.3s; }
        .top-navbar { background:#fff; padding:15px 25px; box-shadow:0 2px 10px rgba(0,0,0,0.08); position:sticky; top:0; z-index:1020; display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px; }
        .page-title { font-size:1.4rem; font-weight:600; margin:0; color:#1a1a2e; }

        .stat-card { background:#fff; border-radius:12px; padding:18px; box-shadow:0 2px 10px rgba(0,0,0,.05); transition:transform .2s; }
        .stat-card:hover { transform:translateY(-3px); }
        .stat-number { font-size:1.8rem; font-weight:700; line-height:1; }
        .stat-label { font-size:0.7rem; text-transform:uppercase; letter-spacing:.5px; color:#6c757d; font-weight:600; }

        .filter-card {
            background:#fff; border-radius:12px; padding:18px 20px;
            box-shadow:0 2px 10px rgba(0,0,0,.05);
            border:2px solid #0dcaf0;
            background: linear-gradient(135deg, #f0fbff 0%, #e0f7ff 100%);
        }
        .filter-card .form-label { font-size:0.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.3px; color:#055160; margin-bottom:3px; }
        .filter-card .form-control, .filter-card .form-select { font-size:0.82rem; }

        .bulk-update-card {
            background:#fff; border-radius:12px; padding:18px 20px;
            box-shadow:0 2px 10px rgba(0,0,0,.05);
            border:2px solid #fd7e14;
            background: linear-gradient(135deg, #fff8e1 0%, #ffe9c4 100%);
            position:sticky; top: 80px;
        }
        .bulk-update-card .form-label { font-size:0.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.3px; color:#7a3f00; }

        .results-table { font-size:0.78rem; margin-bottom:0; }
        .results-table th {
            background:#003366; color:#fff;
            font-size:0.68rem; text-transform:uppercase; letter-spacing:.3px;
            border:none; padding:8px 10px; white-space:nowrap;
            position:sticky; top:0; z-index:5;
        }
        .results-table td { padding:6px 10px; vertical-align:middle; }
        .results-table tbody tr:hover { background:#f0f7ff; }
        .results-table tbody tr.selected { background:#fff3cd !important; }

        .table-wrap { background:#fff; border-radius:12px; overflow:hidden; box-shadow:0 2px 10px rgba(0,0,0,.05); }
        .table-scroll { max-height:70vh; overflow:auto; }

        .exam-badge-WAEC   { background:#0d6efd; color:#fff; }
        .exam-badge-NECO   { background:#6f42c1; color:#fff; }
        .exam-badge-GCE    { background:#fd7e14; color:#fff; }
        .exam-badge-NABTEB { background:#20c997; color:#fff; }

        .sticky-actions {
            background:#fff; border-radius:12px;
            padding:10px 15px; margin-top:10px;
            box-shadow:0 2px 10px rgba(0,0,0,.08);
            position:sticky; bottom:10px; z-index:10;
            display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
        }
        .selected-count-badge { background:#fd7e14; color:#fff; padding:5px 12px; border-radius:20px; font-weight:700; }

        @media (max-width: 992px) { .main-content { margin-left:0; padding:15px; } }
    </style>
</head>
<body>
    <?php require_once 'sidebar.php'; ?>

    <div class="main-content">
        <div class="top-navbar">
            <h1 class="page-title">
                <i class="bi bi-pencil-square me-2 text-warning"></i>Manage Student Results
            </h1>
            <span class="text-muted">
                <i class="bi bi-person-circle me-1"></i>
                <?= escHtml($_SESSION['username']) ?>
                <span class="badge <?= $isAdmin ? 'bg-danger' : 'bg-primary' ?> ms-2">
                    <?= $isAdmin ? 'Admin' : 'Staff' ?>
                </span>
            </span>
        </div>

        <div class="content-wrapper" style="padding-top:20px;">

            <!-- FLASH MESSAGES -->
            <?php if ($update_message): ?>
                <div class="alert alert-success alert-dismissible fade show">
                    <i class="bi bi-check-circle-fill me-2"></i><?= $update_message ?>
                    <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                </div>
            <?php endif; ?>
            <?php if ($update_error): ?>
                <div class="alert alert-danger alert-dismissible fade show">
                    <i class="bi bi-exclamation-triangle-fill me-2"></i><?= escHtml($update_error) ?>
                    <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                </div>
            <?php endif; ?>
            <?php if ($fetch_error): ?>
                <div class="alert alert-danger"><i class="bi bi-bug me-2"></i><?= escHtml($fetch_error) ?></div>
            <?php endif; ?>

            <!-- STATS -->
            <div class="row g-3 mb-3">
                <div class="col-md-3 col-6">
                    <div class="stat-card" style="border-left:4px solid #003366;">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <div class="stat-label">Rows Fetched</div>
                                <div class="stat-number text-primary"><?= count($rows) ?></div>
                            </div>
                            <i class="bi bi-table fs-1 text-primary" style="opacity:.3;"></i>
                        </div>
                    </div>
                </div>
                <div class="col-md-3 col-6">
                    <div class="stat-card" style="border-left:4px solid #0dcaf0;">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <div class="stat-label">Distinct RegNums</div>
                                <div class="stat-number text-info">
                                    <?= count(array_unique(array_column($rows, 'RegNum'))) ?>
                                </div>
                            </div>
                            <i class="bi bi-hash fs-1 text-info" style="opacity:.3;"></i>
                        </div>
                    </div>
                </div>
                <div class="col-md-3 col-6">
                    <div class="stat-card" style="border-left:4px solid #28a745;">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <div class="stat-label">Exam Types</div>
                                <div class="stat-number text-success"><?= count($distinctExamTypes) ?></div>
                            </div>
                            <i class="bi bi-mortarboard fs-1 text-success" style="opacity:.3;"></i>
                        </div>
                    </div>
                </div>
                <div class="col-md-3 col-6">
                    <div class="stat-card" style="border-left:4px solid #fd7e14;">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <div class="stat-label">Limit</div>
                                <div class="stat-number text-warning"><?= $limit ?></div>
                            </div>
                            <i class="bi bi-speedometer2 fs-1 text-warning" style="opacity:.3;"></i>
                        </div>
                    </div>
                </div>
            </div>

            <!-- FILTERS -->
            <div class="filter-card mb-3">
                <h6 class="mb-3 fw-bold text-info"><i class="bi bi-funnel-fill me-2"></i>Filter Records</h6>
                <form method="GET" class="row g-2">
                    <div class="col-md-3">
                        <label class="form-label">RegNum</label>
                        <input type="text" name="filter_regnum" class="form-control form-control-sm"
                               placeholder="e.g. 202211769928BAP"
                               value="<?= escHtml($filter_regnum) ?>">
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">App Number</label>
                        <input type="text" name="filter_app_num" class="form-control form-control-sm"
                               placeholder="GTS..."
                               value="<?= escHtml($filter_app_num) ?>">
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">Student ID</label>
                        <input type="text" name="filter_student_id" class="form-control form-control-sm"
                               placeholder="e.g. 10564"
                               value="<?= escHtml($filter_student_id) ?>">
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">Exam Type</label>
                        <select name="filter_exam_type" class="form-select form-select-sm">
                            <option value="">— All —</option>
                            <?php foreach ($distinctExamTypes as $et): ?>
                                <option value="<?= escHtml($et) ?>" <?= $filter_exam_type === $et ? 'selected' : '' ?>>
                                    <?= escHtml($et) ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">Sitting Type</label>
                        <select name="filter_sitting_type" class="form-select form-select-sm">
                            <option value="">— All —</option>
                            <?php foreach ($distinctSittingTypes as $st): ?>
                                <option value="<?= escHtml($st) ?>" <?= $filter_sitting_type === $st ? 'selected' : '' ?>>
                                    <?= escHtml($st) ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    <div class="col-md-3">
                        <label class="form-label">Subject</label>
                        <input type="text" name="filter_subject" class="form-control form-control-sm"
                               list="subjectList"
                               placeholder="e.g. Mathematics"
                               value="<?= escHtml($filter_subject) ?>">
                        <datalist id="subjectList">
                            <?php foreach ($distinctSubjects as $sj): ?>
                                <option value="<?= escHtml($sj) ?>">
                            <?php endforeach; ?>
                        </datalist>
                    </div>
                    <div class="col-md-3 d-flex align-items-end gap-2">
                        <button type="submit" class="btn btn-info btn-sm flex-fill">
                            <i class="bi bi-search me-1"></i> Apply Filters
                        </button>
                        <a href="manage_student_results.php" class="btn btn-outline-secondary btn-sm">
                            <i class="bi bi-x-circle"></i> Reset
                        </a>
                    </div>
                </form>
            </div>

            <!-- MAIN LAYOUT: TABLE + BULK UPDATE (everyone) -->
            <form method="POST" id="bulkUpdateForm">
                <div class="row g-3">
                    <!-- LEFT: TABLE -->
                    <div class="col-lg-9">
                        <div class="table-wrap">
                            <div class="table-scroll">
                                <table class="table results-table table-hover mb-0" id="resultsTable">
                                    <thead>
                                        <tr>
                                            <th style="width:30px;">
                                                <input type="checkbox" id="selectAll" title="Select All">
                                            </th>
                                            <th>#</th>
                                            <th>Student ID</th>
                                            <th>App Number</th>
                                            <th>Student Name</th>
                                            <th>RegNum</th>
                                            <th>Subject</th>
                                            <th>Grade</th>
                                            <th>Exam Type</th>
                                            <th>Exam Number</th>
                                            <th>Sitting</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php if (empty($rows)): ?>
                                            <tr>
                                                <td colspan="11" class="text-center py-5 text-muted">
                                                    <i class="bi bi-inbox fs-1 d-block mb-2"></i>
                                                    No records found. Try adjusting your filters.
                                                </td>
                                            </tr>
                                        <?php else: ?>
                                            <?php $sn = 1; foreach ($rows as $row):
                                                $examClass = 'exam-badge-' . $row['ExamType'];
                                            ?>
                                                <tr>
                                                    <td>
                                                        <input type="checkbox" name="row_ids[]"
                                                               value="<?= (int)$row['id'] ?>"
                                                               class="row-checkbox">
                                                    </td>
                                                    <td><?= $sn++ ?></td>
                                                    <td><code><?= escHtml($row['student_id']) ?></code></td>
                                                    <td>
                                                        <?php if (!empty($row['AppNum'])): ?>
                                                            <span class="fw-bold text-primary"><?= escHtml($row['AppNum']) ?></span>
                                                        <?php else: ?>
                                                            <span class="text-muted">—</span>
                                                        <?php endif; ?>
                                                    </td>
                                                    <td>
                                                        <?php
                                                        $fullName = trim(($row['Surname'] ?? '') . ' ' . ($row['Firstname'] ?? '') . ' ' . ($row['Othername'] ?? ''));
                                                        echo escHtml($fullName ?: '—');
                                                        ?>
                                                    </td>
                                                    <td><code class="text-dark"><?= escHtml($row['RegNum']) ?></code></td>
                                                    <td><?= escHtml($row['SubjectName']) ?></td>
                                                    <td>
                                                        <span class="badge bg-secondary"><?= escHtml($row['Grade']) ?></span>
                                                    </td>
                                                    <td>
                                                        <span class="badge <?= $examClass ?>"><?= escHtml($row['ExamType']) ?></span>
                                                    </td>
                                                    <td><small class="text-muted"><?= escHtml($row['ExamNumber'] ?: '—') ?></small></td>
                                                    <td><small><?= escHtml($row['sitting_type'] ?: '—') ?></small></td>
                                                </tr>
                                            <?php endforeach; ?>
                                        <?php endif; ?>
                                    </tbody>
                                </table>
                            </div>
                        </div>

                        <!-- STICKY ACTION BAR -->
                        <div class="sticky-actions">
                            <div>
                                <span class="selected-count-badge" id="selectedCountBadge">
                                    <i class="bi bi-check2-square me-1"></i>
                                    <span id="selectedCount">0</span> selected
                                </span>
                            </div>
                            <div class="d-flex gap-2">
                                <button type="button" class="btn btn-outline-secondary btn-sm" onclick="clearSelection()">
                                    <i class="bi bi-x-circle me-1"></i>Clear Selection
                                </button>
                                <button type="submit" name="bulk_update" value="1"
                                        class="btn btn-warning btn-sm"
                                        onclick="return confirmBulkUpdate();">
                                    <i class="bi bi-save me-1"></i>Apply Bulk Update
                                </button>
                            </div>
                        </div>
                    </div>

                    <!-- RIGHT: BULK UPDATE PANEL -->
                    <div class="col-lg-3">
                        <div class="bulk-update-card">
                            <h6 class="fw-bold text-warning mb-3">
                                <i class="bi bi-lightning-charge-fill me-2"></i>Bulk Update Panel
                            </h6>

                            <div class="alert alert-warning small py-2 px-3 mb-3">
                                <i class="bi bi-info-circle me-1"></i>
                                Select rows from the table on the left, then fill the fields below to apply the update.
                                <strong>Leave a field empty to skip it.</strong>
                            </div>

                            <div class="mb-3">
                                <label class="form-label">
                                    <i class="bi bi-hash me-1"></i>New RegNum
                                </label>
                                <input type="text" name="new_regnum" class="form-control form-control-sm"
                                       placeholder="e.g. 202211769928BAP">
                                <div class="form-text">Applies to <strong>all</strong> selected rows.</div>
                            </div>

                            <!-- Uncomment the following fields if you want them available again -->
                            <!--
                            <div class="mb-3">
                                <label class="form-label"><i class="bi bi-mortarboard me-1"></i>New Exam Type</label>
                                <select name="new_exam_type" class="form-select form-select-sm">
                                    <option value="">— Skip (no change) —</option>
                                    <option value="WAEC">WAEC</option>
                                    <option value="NECO">NECO</option>
                                    <option value="GCE">GCE</option>
                                    <option value="NABTEB">NABTEB</option>
                                </select>
                            </div>

                            <div class="mb-3">
                                <label class="form-label"><i class="bi bi-layers me-1"></i>New Sitting Type</label>
                                <input type="text" name="new_sitting_type" class="form-control form-control-sm"
                                       list="sittingTypeList"
                                       placeholder="e.g. 1st Sitting">
                                <datalist id="sittingTypeList">
                                    <option value="1st Sitting">
                                    <option value="2nd Sitting">
                                    <option value="Single Sitting">
                                    <option value="Combined">
                                </datalist>
                            </div>

                            <div class="mb-3">
                                <label class="form-label"><i class="bi bi-123 me-1"></i>New Exam Number</label>
                                <input type="text" name="new_exam_number" class="form-control form-control-sm"
                                       placeholder="e.g. 4284305118">
                            </div>
                            -->

                            <div class="mt-3 p-2 bg-light rounded small">
                                <strong><i class="bi bi-info-circle me-1"></i>Note:</strong>
                                Updates are permanent. Double-check before applying.
                                Each row's <code>RegNum</code> will be overwritten if provided.
                            </div>
                        </div>
                    </div>
                </div>
            </form>

        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        const selectAllCheckbox = document.getElementById('selectAll');
        const rowCheckboxes = document.querySelectorAll('.row-checkbox');
        const selectedCountEl = document.getElementById('selectedCount');
        const selectedCountBadge = document.getElementById('selectedCountBadge');

        function updateSelectedCount() {
            const checked = document.querySelectorAll('.row-checkbox:checked');
            if (selectedCountEl) selectedCountEl.textContent = checked.length;
            if (selectedCountBadge) {
                selectedCountBadge.style.background = checked.length > 0 ? '#28a745' : '#fd7e14';
            }
            document.querySelectorAll('#resultsTable tbody tr').forEach(tr => {
                const cb = tr.querySelector('.row-checkbox');
                if (cb && cb.checked) tr.classList.add('selected');
                else tr.classList.remove('selected');
            });
        }

        if (selectAllCheckbox) {
            selectAllCheckbox.addEventListener('change', function() {
                rowCheckboxes.forEach(cb => cb.checked = this.checked);
                updateSelectedCount();
            });
        }
        rowCheckboxes.forEach(cb => cb.addEventListener('change', updateSelectedCount));

        function clearSelection() {
            rowCheckboxes.forEach(cb => cb.checked = false);
            if (selectAllCheckbox) selectAllCheckbox.checked = false;
            updateSelectedCount();
        }

        function confirmBulkUpdate() {
            const checked = document.querySelectorAll('.row-checkbox:checked');
            if (checked.length === 0) {
                alert('⚠️ Please select at least one row from the table before applying the update.');
                return false;
            }

            const regnum = document.querySelector('input[name="new_regnum"]')?.value.trim() || '';
            const examType = document.querySelector('select[name="new_exam_type"]')?.value || '';
            const sittingType = document.querySelector('input[name="new_sitting_type"]')?.value.trim() || '';
            const examNumber = document.querySelector('input[name="new_exam_number"]')?.value.trim() || '';

            if (!regnum && !examType && !sittingType && !examNumber) {
                alert('⚠️ Please fill at least one field to update (RegNum, Exam Type, Sitting Type, or Exam Number).');
                return false;
            }

            let summary = 'You are about to update ' + checked.length + ' row(s):\n\n';
            if (regnum) summary += '• New RegNum: ' + regnum + '\n';
            if (examType) summary += '• New Exam Type: ' + examType + '\n';
            if (sittingType) summary += '• New Sitting Type: ' + sittingType + '\n';
            if (examNumber) summary += '• New Exam Number: ' + examNumber + '\n';
            summary += '\nThis action is PERMANENT. Continue?';

            return confirm(summary);
        }

        updateSelectedCount();
    </script>
</body>
</html>