<?php
/**
 * IBVTE Admin – Manage Students (Approval + Full Details)
 */
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();
$action = $_GET['action'] ?? 'list';
$flash  = getFlashMessage();

// Approve
if ($action === 'approve' && isset($_GET['id'])) {
    // CSRF Protection
    if (!Auth()->verifyCSRFToken($_GET['csrf_token'] ?? '')) {
        redirectWithMessage('students.php', 'Security session expired. Please try again.', 'danger');
    }

    $sid = intval($_GET['id']);
    $roll = generateRollNumber($sid);
    
    $db->update('students', [
        'roll_number'     => $roll,
        'status'          => 'active',
        'approval_status' => 'approved',
        'approved_by'     => $user['id'],
        'approved_at'     => date('Y-m-d H:i:s'),
    ], ['id' => $sid]);
    redirectWithMessage('students.php', "✅ Student approved. Roll No: $roll", 'success');
}

// Reject
if ($action === 'reject' && isset($_GET['id'])) {
    // CSRF Protection
    if (!Auth()->verifyCSRFToken($_GET['csrf_token'] ?? '')) {
        redirectWithMessage('students.php', 'Security session expired. Please try again.', 'danger');
    }

    $db->update('students', [
        'status'          => 'inactive',
        'approval_status' => 'rejected',
        'approved_by'     => $user['id'],
        'approved_at'     => date('Y-m-d H:i:s'),
    ], ['id' => intval($_GET['id'])]);
    redirectWithMessage('students.php', '❌ Student admission rejected.', 'danger');
}

// Search and Pagination
$search = cleanInput($_GET['search'] ?? '');
$filter = $_GET['filter'] ?? '';
$page = max(1, intval($_GET['page'] ?? 1));
$perPage = 20;
$offset = ($page - 1) * $perPage;

$where = " WHERE 1=1 ";
$params = [];

if ($filter === 'pending') {
    $where .= " AND s.approval_status='pending'";
}

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

// Count total
$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, c.duration,
               u.institution_name, u.institution_code
        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 FIELD(COALESCE(s.approval_status,'pending'),'pending','approved','rejected'), s.created_at DESC
        LIMIT $perPage OFFSET $offset";
$students = $db->fetchAll($sql, $params);

$pendingCount = $db->fetchColumn("SELECT COUNT(*) FROM students WHERE COALESCE(approval_status,'pending')='pending'");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Manage Students – <?= 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">
<link href="../assets/css/admin-style.css" rel="stylesheet">
</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 py-4">

<div class="d-flex justify-content-between align-items-center mb-4">
    <h2 class="h3 fw-bold"><i class="fas fa-users me-2 text-primary"></i>Manage Students</h2>
    <?php if ($pendingCount > 0): ?>
    <span class="badge bg-warning text-dark fs-6"><?= $pendingCount ?> Pending Approval</span>
    <?php endif; ?>
</div>

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

<div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
    <ul class="nav nav-pills gap-1">
        <li class="nav-item"><a class="nav-link <?= !$filter?'active':'' ?>" href="students.php">All</a></li>
        <li class="nav-item"><a class="nav-link <?= $filter==='pending'?'active':'' ?>" href="?filter=pending">⏳ Pending (<?= $pendingCount ?>)</a></li>
    </ul>
    
    <form method="GET" class="d-flex gap-2" style="max-width: 400px; width: 100%;">
        <?php if($filter): ?><input type="hidden" name="filter" value="<?= htmlspecialchars($filter) ?>"><?php endif; ?>
        <div class="input-group">
            <span class="input-group-text bg-white border-end-0"><i class="fas fa-search text-muted"></i></span>
            <input type="text" name="search" class="form-control border-start-0" placeholder="Search by Name, Reg No, Roll No..." value="<?= htmlspecialchars($search) ?>">
            <button class="btn btn-primary" type="submit">Search</button>
        </div>
        <?php if($search): ?>
            <a href="students.php<?= $filter ? '?filter='.urlencode($filter) : '' ?>" class="btn btn-outline-secondary">Clear</a>
        <?php endif; ?>
    </form>
</div>

<div class="card border-0 shadow-sm" style="border-radius:14px;">
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
    <thead class="bg-light">
        <tr>
            <th class="ps-3">Reg No</th>
            <th>Student</th>
            <th>College</th>
            <th>Course</th>
            <th>Fee</th>
            <th>Approval</th>
            <th>Date</th>
            <th class="text-end pe-3">Actions</th>
        </tr>
    </thead>
    <tbody>
    <?php if (empty($students)): ?>
    <tr><td colspan="8" class="text-center py-5 text-muted">No students found.</td></tr>
    <?php endif; ?>
    <?php foreach ($students as $s):
        $ap = $s['approval_status'] ?? 'pending';
        $apBadge = match($ap) {
            'approved' => '<span class="badge bg-success">Approved</span>',
            'rejected' => '<span class="badge bg-danger">Rejected</span>',
            default    => '<span class="badge bg-warning text-dark">Pending</span>',
        };
    ?>
    <tr <?= $ap==='pending'?'style="border-left:4px solid #ffc107;"':'' ?>>
        <td class="ps-3">
            <span class="badge bg-light border text-dark fw-bold small">
                <?= htmlspecialchars($s['registration_number'] ?? 'S-'.$s['id']) ?>
            </span>
        </td>
        <td>
            <div class="fw-bold text-dark"><?= htmlspecialchars($s['full_name']) ?></div>
            <div class="small fw-bold text-primary">Roll No: <?= htmlspecialchars($s['roll_number'] ?? 'Not Assigned') ?></div>
            <?php if (!empty($s['father_name'])): ?>
            <small class="text-muted">F: <?= htmlspecialchars($s['father_name']) ?></small><br>
            <?php endif; ?>
            <small class="text-muted">📞 <?= htmlspecialchars($s['mobile'] ?? '-') ?></small>
        </td>
        <td>
            <div class="small fw-bold text-primary"><?= htmlspecialchars($s['institution_name'] ?? 'Direct') ?></div>
            <small class="text-muted"><?= htmlspecialchars($s['institution_code'] ?? '') ?></small>
        </td>
        <td>
            <div class="small fw-bold"><?= htmlspecialchars($s['course_name'] ?? '-') ?></div>
            <small class="text-muted"><?= htmlspecialchars($s['duration'] ?? '') ?></small>
        </td>
        <td class="fw-bold text-success small">Rs <?= number_format($s['total_fee'] ?? 0, 0) ?></td>
        <td><?= $apBadge ?></td>
        <td class="small"><?= date('d M Y', strtotime($s['created_at'])) ?></td>
        <td class="text-end pe-3">
            <div class="d-flex gap-1 justify-content-end">
                <a href="view-student.php?id=<?= $s['id'] ?>" class="btn btn-sm btn-outline-primary" title="View">
                    <i class="fas fa-eye"></i>
                </a>
                <?php if ($ap === 'pending'): ?>
                <a href="?action=approve&id=<?= $s['id'] ?>&csrf_token=<?= Auth()->generateCSRFToken() ?>"
                   class="btn btn-sm btn-success fw-bold"
                   onclick="return confirm('Approve this student admission?')">
                    <i class="fas fa-check me-1"></i>Approve
                </a>
                <a href="?action=reject&id=<?= $s['id'] ?>&csrf_token=<?= Auth()->generateCSRFToken() ?>"
                   class="btn btn-sm btn-danger"
                   onclick="return confirm('Reject this admission?')">
                    <i class="fas fa-times"></i>
                </a>
                <?php endif; ?>
            </div>
        </td>
    </tr>
    <?php endforeach; ?>
    </tbody>
</table>
</div>
</div>

<?php if ($totalPages > 1): ?>
<nav class="mt-4">
    <ul class="pagination justify-content-center">
        <li class="page-item <?= $page <= 1 ? 'disabled' : '' ?>">
            <a class="page-link shadow-sm rounded-pill px-3 me-2" href="?page=<?= $page - 1 ?>&search=<?= urlencode($search) ?>&filter=<?= urlencode($filter) ?>">Previous</a>
        </li>
        <?php 
        $start = max(1, $page - 2);
        $end = min($totalPages, $page + 2);
        if($start > 1) echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
        for ($i = $start; $i <= $end; $i++): 
        ?>
        <li class="page-item <?= $i == $page ? 'active' : '' ?>">
            <a class="page-link shadow-sm mx-1 rounded-circle" style="width:40px;height:40px;display:flex;align-items:center;justify-content:center;" href="?page=<?= $i ?>&search=<?= urlencode($search) ?>&filter=<?= urlencode($filter) ?>"><?= $i ?></a>
        </li>
        <?php endfor; ?>
        <?php if($end < $totalPages) echo '<li class="page-item disabled"><span class="page-link">...</span></li>'; ?>
        <li class="page-item <?= $page >= $totalPages ? 'disabled' : '' ?>">
            <a class="page-link shadow-sm rounded-pill px-3 ms-2" href="?page=<?= $page + 1 ?>&search=<?= urlencode($search) ?>&filter=<?= urlencode($filter) ?>">Next</a>
        </li>
    </ul>
</nav>
<?php endif; ?>

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