<?php
/**
 * IBVTE Admin – Fund Requests Management
 * Table view with Transaction ID, snapshot preview, approve/reject
 */

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();
$flash = getFlashMessage();
$user  = Auth()->getUser();

// ── APPROVE ────────────────────────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
    // CSRF Protection
    if (!Auth()->verifyCSRFToken($_POST['csrf_token'] ?? '')) {
        redirectWithMessage('fund-requests.php', 'Security session expired. Please try again.', 'danger');
    }

    $rid    = intval($_POST['request_id'] ?? 0);
    $action = $_POST['action'];

    if ($action === 'approve' && $rid) {
        $approvedAmt = floatval($_POST['approved_amount'] ?? 0);
        $remarks     = trim($_POST['remarks'] ?? 'Approved by admin');

        try {
            // Try stored procedure first
            $db->query("CALL ApproveFundRequest(?, ?, ?, ?)", [
                $rid, $user['id'], $approvedAmt, $remarks
            ]);
        } catch (Exception $e) {
            // Fallback: manual update
            $req = $db->fetchOne("SELECT * FROM fund_requests WHERE id = ?", [$rid]);
            if ($req) {
                $db->update('fund_requests', [
                    'status'          => 'approved',
                    'approved_amount' => $approvedAmt,
                    'approved_at'     => date('Y-m-d H:i:s'),
                    'approver_id'     => $user['id'],
                    'remarks'         => $remarks,
                ], ['id' => $rid]);

                // Credit wallet
                $db->query(
                    "UPDATE wallets SET balance = balance + ? WHERE user_id = ?",
                    [$approvedAmt, $req['requester_id']]
                );

                // Log college activity
                try {
                    $db->insert('college_activity_logs', [
                        'college_id'  => $req['requester_id'],
                        'action'      => 'FUND_REQUEST_APPROVED',
                        'description' => "Fund request of ₹" . number_format($approvedAmt, 2) . " approved by admin.",
                        'entity_type' => 'fund_request',
                        'entity_id'   => $rid,
                        'ip_address'  => $_SERVER['REMOTE_ADDR'] ?? '',
                    ]);
                } catch (Exception $e2) {
                    error_log("Fund Request Transaction Error: " . $e2->getMessage());
                }
            }
        }
        redirectWithMessage('fund-requests.php', '✅ Fund request approved and wallet credited.', 'success');
    }

    if ($action === 'reject' && $rid) {
        $reason = trim($_POST['remarks'] ?? 'Rejected by admin');
        $db->update('fund_requests', [
            'status'           => 'rejected',
            'rejection_reason' => $reason,
            'rejected_at'      => date('Y-m-d H:i:s'),
            'approver_id'      => $user['id'],
        ], ['id' => $rid]);

        try {
            $req = $db->fetchOne("SELECT requester_id FROM fund_requests WHERE id=?", [$rid]);
            if ($req) {
                $db->insert('college_activity_logs', [
                    'college_id'  => $req['requester_id'],
                    'action'      => 'FUND_REQUEST_REJECTED',
                    'description' => "Fund request rejected. Reason: $reason",
                    'entity_type' => 'fund_request',
                    'entity_id'   => $rid,
                    'ip_address'  => $_SERVER['REMOTE_ADDR'] ?? '',
                ]);
            }
        } catch (Exception $e) {
            error_log("Fund Request Status Update Error: " . $e->getMessage());
        }
        redirectWithMessage('fund-requests.php', '❌ Fund request rejected.', 'warning');
    }
}

// ── FETCH DATA ─────────────────────────────────────────────────────────────────
$statusFilter = $_GET['status'] ?? '';
$sql = "SELECT fr.*, u.institution_name, u.institution_code, u.username, u.mobile, u.email
        FROM fund_requests fr
        JOIN users u ON fr.requester_id = u.id";
$params = [];
if ($statusFilter) { $sql .= " WHERE fr.status = ?"; $params[] = $statusFilter; }
$sql .= " ORDER BY FIELD(fr.status,'pending','under_review','approved','rejected'), fr.created_at DESC";
$requests = $db->fetchAll($sql, $params);

// Helper: extract Transaction ID from remarks string
function extractTxnId($remarks) {
    if (preg_match('/Trans ID:\s*([^\s|]+)/i', $remarks, $m)) return $m[1];
    return $remarks ?: '—';
}

// Stats
$stats = [
    'all'      => $db->count('fund_requests'),
    'pending'  => $db->count('fund_requests', ['status' => 'pending']),
    'approved' => $db->count('fund_requests', ['status' => 'approved']),
    'rejected' => $db->count('fund_requests', ['status' => 'rejected']),
];
$pendingTotal = $db->fetchColumn(
    "SELECT COALESCE(SUM(amount),0) FROM fund_requests WHERE status='pending'"
) ?? 0;

$adminWallet = $db->fetchOne("SELECT balance FROM wallets WHERE wallet_type='admin'");
$adminBal    = $adminWallet['balance'] ?? 0;
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fund Requests – <?= 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">
    <style>
        :root { --primary:#3b0b7c; --secondary:#6c4ab6; }
        .snap-thumb {
            width: 56px; height: 56px; object-fit: cover;
            border-radius: 8px; cursor: zoom-in;
            border: 2px solid #e0d8f0;
            transition: transform .2s;
        }
        .snap-thumb:hover { transform: scale(1.08); }
        .txn-badge {
            font-family: monospace; background:#f0ebf8;
            color: var(--primary); padding: 3px 10px;
            border-radius: 6px; font-size: .82rem; font-weight: 700;
        }
        .status-pill {
            border-radius: 50px; padding: 4px 14px; font-size: .78rem; font-weight: 700;
        }
        .row-pending  { border-left: 4px solid #ffc107 !important; }
        .row-approved { border-left: 4px solid #28a745 !important; }
        .row-rejected { border-left: 4px solid #dc3545 !important; }
        .stat-card { border-radius: 14px; border: none; box-shadow: 0 4px 15px rgba(0,0,0,.07); }
        .table td, .table th { vertical-align: middle; }
        .img-modal-body img { max-width: 100%; border-radius: 12px; }
    </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 py-4">

            <div class="d-flex justify-content-between align-items-center mb-4">
                <h2 class="h3 fw-bold"><i class="fas fa-hand-holding-usd me-2 text-primary"></i>Fund Requests</h2>
                <span class="badge bg-warning text-dark fs-6"><?= $stats['pending'] ?> Pending</span>
            </div>

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

            <!-- Stats Row -->
            <div class="row g-3 mb-4">
                <div class="col-6 col-md-3">
                    <div class="stat-card card p-3 text-center"
                         style="background:linear-gradient(135deg,var(--primary),var(--secondary));color:white;">
                        <div class="h4 fw-bold mb-0">₹<?= number_format($adminBal, 0) ?></div>
                        <small class="opacity-75">Admin Wallet</small>
                    </div>
                </div>
                <div class="col-6 col-md-3">
                    <div class="stat-card card p-3 text-center border-start border-4 border-warning">
                        <div class="h4 fw-bold mb-0 text-warning"><?= $stats['pending'] ?></div>
                        <small class="text-muted">Pending</small>
                        <div class="small text-muted">₹<?= number_format($pendingTotal, 0) ?></div>
                    </div>
                </div>
                <div class="col-6 col-md-3">
                    <div class="stat-card card p-3 text-center border-start border-4 border-success">
                        <div class="h4 fw-bold mb-0 text-success"><?= $stats['approved'] ?></div>
                        <small class="text-muted">Approved</small>
                    </div>
                </div>
                <div class="col-6 col-md-3">
                    <div class="stat-card card p-3 text-center border-start border-4 border-danger">
                        <div class="h4 fw-bold mb-0 text-danger"><?= $stats['rejected'] ?></div>
                        <small class="text-muted">Rejected</small>
                    </div>
                </div>
            </div>

            <!-- Filter Tabs -->
            <ul class="nav nav-pills mb-3 gap-1">
                <li class="nav-item"><a class="nav-link <?= !$statusFilter?'active':'' ?>" href="fund-requests.php">All (<?= $stats['all'] ?>)</a></li>
                <li class="nav-item"><a class="nav-link <?= $statusFilter==='pending'?'active':'' ?>"  href="?status=pending">⏳ Pending (<?= $stats['pending'] ?>)</a></li>
                <li class="nav-item"><a class="nav-link <?= $statusFilter==='approved'?'active':'' ?>" href="?status=approved">✅ Approved (<?= $stats['approved'] ?>)</a></li>
                <li class="nav-item"><a class="nav-link <?= $statusFilter==='rejected'?'active':'' ?>" href="?status=rejected">❌ Rejected (<?= $stats['rejected'] ?>)</a></li>
            </ul>

            <!-- Main Table -->
            <div class="card border-0 shadow-sm" style="border-radius:15px;">
                <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">#</th>
                                    <th>College</th>
                                    <th>Amount</th>
                                    <th>Transaction ID</th>
                                    <th>Payment Proof</th>
                                    <th>Date</th>
                                    <th>Status</th>
                                    <th class="text-end pe-3">Actions</th>
                                </tr>
                            </thead>
                            <tbody>
                            <?php if (empty($requests)): ?>
                                <tr><td colspan="8" class="text-center py-5 text-muted">
                                    <i class="fas fa-inbox fa-2x d-block mb-2 opacity-25"></i>No fund requests found.
                                </td></tr>
                            <?php endif; ?>
                            <?php foreach ($requests as $r):
                                $txnId   = extractTxnId($r['remarks'] ?? '');
                                $snapUrl = !empty($r['supporting_document'])
                                           ? '../' . ltrim($r['supporting_document'], '/')
                                           : '';
                                $badgeCls = match($r['status']) {
                                    'approved'     => 'bg-success',
                                    'rejected'     => 'bg-danger',
                                    'under_review' => 'bg-info',
                                    default        => 'bg-warning text-dark',
                                };
                                $rowCls = 'row-' . $r['status'];
                            ?>
                            <tr class="<?= $rowCls ?>">
                                <td class="ps-3 text-muted small">#<?= $r['id'] ?></td>
                                <td>
                                    <div class="fw-bold text-primary"><?= htmlspecialchars($r['institution_name']) ?></div>
                                    <small class="text-muted"><?= htmlspecialchars($r['username']) ?> | <?= htmlspecialchars($r['institution_code'] ?? '') ?></small>
                                </td>
                                <td>
                                    <div class="fw-bold fs-5">₹<?= number_format($r['amount'], 2) ?></div>
                                    <?php if ($r['approved_amount']): ?>
                                        <small class="text-success">Approved: ₹<?= number_format($r['approved_amount'], 2) ?></small>
                                    <?php endif; ?>
                                </td>
                                <td>
                                    <span class="txn-badge"><?= htmlspecialchars($txnId) ?></span>
                                </td>
                                <td>
                                    <?php if ($snapUrl): ?>
                                        <img src="<?= htmlspecialchars($snapUrl) ?>"
                                             class="snap-thumb"
                                             alt="Snapshot"
                                             onclick="openSnap('<?= htmlspecialchars($snapUrl) ?>','<?= htmlspecialchars($r['institution_name']) ?>')"
                                             onerror="this.src='../assets/images/no-image.png'">
                                    <?php else: ?>
                                        <span class="text-muted small"><i class="fas fa-image me-1"></i>No file</span>
                                    <?php endif; ?>
                                </td>
                                <td><small><?= date('d M Y<br>h:i A', strtotime($r['created_at'])) ?></small></td>
                                <td><span class="badge status-pill <?= $badgeCls ?>"><?= ucfirst(str_replace('_',' ',$r['status'])) ?></span></td>
                                <td class="text-end pe-3">
                                    <div class="d-flex gap-1 justify-content-end flex-wrap">
                                        <!-- View Detail -->
                                        <button class="btn btn-sm btn-outline-primary"
                                                onclick="viewDetail(<?= htmlspecialchars(json_encode($r)) ?>)"
                                                title="View Full Detail">
                                            <i class="fas fa-eye"></i>
                                        </button>
                                        <?php if ($r['status'] === 'pending'): ?>
                                        <!-- Approve -->
                                        <button class="btn btn-sm btn-success"
                                                onclick="openApprove(<?= $r['id'] ?>,<?= $r['amount'] ?>,'<?= htmlspecialchars($r['institution_name']) ?>')"
                                                title="Approve">
                                            <i class="fas fa-check"></i>
                                        </button>
                                        <!-- Reject -->
                                        <button class="btn btn-sm btn-danger"
                                                onclick="openReject(<?= $r['id'] ?>,'<?= htmlspecialchars($r['institution_name']) ?>')"
                                                title="Reject">
                                            <i class="fas fa-times"></i>
                                        </button>
                                        <?php endif; ?>
                                    </div>
                                </td>
                            </tr>
                            <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

        </main>
    </div>
</div>

<!-- ── Snapshot Lightbox Modal ─────────────────────────────────────────── -->
<div class="modal fade" id="snapModal" tabindex="-1">
    <div class="modal-dialog modal-lg modal-dialog-centered">
        <div class="modal-content border-0 shadow">
            <div class="modal-header" style="background:linear-gradient(135deg,var(--primary),var(--secondary));color:white;">
                <h5 class="modal-title"><i class="fas fa-image me-2"></i><span id="snapTitle">Payment Proof</span></h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body text-center img-modal-body p-3">
                <img id="snapImg" src="" alt="Payment Snapshot" style="max-height:75vh;max-width:100%;border-radius:10px;">
            </div>
            <div class="modal-footer">
                <a id="snapDownload" href="#" target="_blank" class="btn btn-primary btn-sm">
                    <i class="fas fa-external-link-alt me-1"></i>Open Full Size
                </a>
                <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

<!-- ── Detail Modal ────────────────────────────────────────────────────── -->
<div class="modal fade" id="detailModal" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content border-0 shadow">
            <div class="modal-header" style="background:linear-gradient(135deg,var(--primary),var(--secondary));color:white;">
                <h5 class="modal-title"><i class="fas fa-file-invoice me-2"></i>Request Details</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body" id="detailBody"></div>
        </div>
    </div>
</div>

<!-- ── Approve Modal ───────────────────────────────────────────────────── -->
<div class="modal fade" id="approveModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content border-0 shadow">
            <div class="modal-header bg-success text-white">
                <h5 class="modal-title"><i class="fas fa-check me-2"></i>Approve Fund Request</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <form method="POST">
                <input type="hidden" name="csrf_token" value="<?= Auth()->generateCSRFToken() ?>">
                <div class="modal-body">
                    <input type="hidden" name="action" value="approve">
                    <input type="hidden" name="request_id" id="app_rid">
                    <p class="mb-3">Approving request from: <strong id="app_inst"></strong></p>
                    <div class="mb-3">
                        <label class="fw-bold">Approved Amount (₹) *</label>
                        <input type="number" name="approved_amount" id="app_amt" class="form-control" step="0.01" required>
                        <small class="text-muted">Can approve partial amount</small>
                    </div>
                    <div class="mb-3">
                        <label class="fw-bold">Remarks</label>
                        <textarea name="remarks" class="form-control" rows="2" placeholder="Optional note..."></textarea>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-success fw-bold">
                        <i class="fas fa-check me-1"></i>Confirm Approval
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- ── Reject Modal ────────────────────────────────────────────────────── -->
<div class="modal fade" id="rejectModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content border-0 shadow">
            <div class="modal-header bg-danger text-white">
                <h5 class="modal-title"><i class="fas fa-times me-2"></i>Reject Fund Request</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <form method="POST">
                <input type="hidden" name="csrf_token" value="<?= Auth()->generateCSRFToken() ?>">
                <div class="modal-body">
                    <input type="hidden" name="action" value="reject">
                    <input type="hidden" name="request_id" id="rej_rid">
                    <p>Rejecting request from: <strong id="rej_inst"></strong></p>
                    <div class="mb-3">
                        <label class="fw-bold">Rejection Reason *</label>
                        <textarea name="remarks" class="form-control" rows="3" required
                                  placeholder="Why are you rejecting this request?"></textarea>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-danger fw-bold">
                        <i class="fas fa-times me-1"></i>Confirm Rejection
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Snapshot lightbox
function openSnap(url, title) {
    document.getElementById('snapImg').src = url;
    document.getElementById('snapTitle').textContent = title + ' — Payment Proof';
    document.getElementById('snapDownload').href = url;
    new bootstrap.Modal(document.getElementById('snapModal')).show();
}

// Approve modal
function openApprove(id, amount, inst) {
    document.getElementById('app_rid').value  = id;
    document.getElementById('app_amt').value  = amount;
    document.getElementById('app_inst').textContent = inst;
    new bootstrap.Modal(document.getElementById('approveModal')).show();
}

// Reject modal
function openReject(id, inst) {
    document.getElementById('rej_rid').value  = id;
    document.getElementById('rej_inst').textContent = inst;
    new bootstrap.Modal(document.getElementById('rejectModal')).show();
}

// Full detail modal
function viewDetail(r) {
    const snap = r.supporting_document
        ? `<div class="text-center mb-3">
               <img src="../${r.supporting_document}" class="img-fluid rounded-3 shadow-sm" style="max-height:200px;cursor:zoom-in;"
                    onclick="openSnap('../${r.supporting_document}','${r.institution_name}')">
               <div class="mt-1"><small class="text-muted">Click to enlarge</small></div>
           </div>`
        : `<div class="alert alert-secondary text-center"><i class="fas fa-image me-2"></i>No snapshot uploaded</div>`;

    const statusBadge = {
        pending:'warning text-dark', approved:'success', rejected:'danger', under_review:'info'
    }[r.status] || 'secondary';

    document.getElementById('detailBody').innerHTML = `
    <div class="row g-3 pt-2">
        <div class="col-md-6">
            <table class="table table-sm table-borderless">
                <tr><td class="text-muted">College</td><td><strong>${r.institution_name}</strong></td></tr>
                <tr><td class="text-muted">User ID</td><td>${r.username}</td></tr>
                <tr><td class="text-muted">Code</td><td>${r.institution_code || '—'}</td></tr>
                <tr><td class="text-muted">Mobile</td><td>${r.mobile || '—'}</td></tr>
                <tr><td class="text-muted">Email</td><td>${r.email || '—'}</td></tr>
            </table>
        </div>
        <div class="col-md-6">
            <table class="table table-sm table-borderless">
                <tr><td class="text-muted">Amount</td><td class="fw-bold fs-5">₹${parseFloat(r.amount).toLocaleString('en-IN',{minimumFractionDigits:2})}</td></tr>
                <tr><td class="text-muted">Approved Amt</td><td>${r.approved_amount ? '₹'+parseFloat(r.approved_amount).toLocaleString('en-IN',{minimumFractionDigits:2}) : '—'}</td></tr>
                <tr><td class="text-muted">Transaction ID</td><td><span class="badge bg-light text-dark border fw-bold">${r.remarks || '—'}</span></td></tr>
                <tr><td class="text-muted">Purpose</td><td>${r.purpose || '—'}</td></tr>
                <tr><td class="text-muted">Status</td><td><span class="badge bg-${statusBadge}">${r.status}</span></td></tr>
                <tr><td class="text-muted">Date</td><td><small>${r.created_at}</small></td></tr>
            </table>
        </div>
        <div class="col-12">
            <h6 class="fw-bold text-muted border-top pt-3 mb-3">Payment Proof / Snapshot</h6>
            ${snap}
        </div>
    </div>`;

    new bootstrap.Modal(document.getElementById('detailModal')).show();
}
</script>
</body>
</html>
