<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();

if (!isset($_SESSION['admin'])) {
    header("Location: admin_login.php");
    exit();
}

// --- Database connection ---
$servername = "localhost";
$username   = "nassrrkx_Asovtu";
$password   = "nassrrkx_Asovtu";
$dbname     = "nassrrkx_Asovtu";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) die("Database connection failed: " . $conn->connect_error);

// --- Admin session check ---
if (!isset($_SESSION['admin'])) $_SESSION['admin'] = 'Admin';

// --- Create balance table if not exists ---
$conn->query("
CREATE TABLE IF NOT EXISTS balance (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user VARCHAR(100) UNIQUE,
  amount DECIMAL(15,2) DEFAULT 0
);
");

// --- Ensure transaction table exists ---
$conn->query("
CREATE TABLE IF NOT EXISTS transaction (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

// --- Ensure required columns exist ---
$required_columns = [
    'admin' => "VARCHAR(100) DEFAULT NULL",
    'type' => "ENUM('credit','debit') DEFAULT 'credit'",
    'amount' => "DECIMAL(15,2) DEFAULT 0",
    'old_balance' => "DECIMAL(15,2) DEFAULT 0",
    'new_balance' => "DECIMAL(15,2) DEFAULT 0",
    'reason' => "VARCHAR(255) DEFAULT NULL",
    'created_at' => "DATETIME DEFAULT CURRENT_TIMESTAMP"
];

foreach($required_columns as $col => $definition){
    $check = $conn->query("SHOW COLUMNS FROM transaction LIKE '$col'");
    if($check->num_rows==0){
        $conn->query("ALTER TABLE transaction ADD COLUMN $col $definition");
    }
}

// --- Handle AJAX endpoints ---
if (isset($_GET['action'])) {
    $act = $_GET['action'];

    // Live autocomplete for fund form
    if ($act == 'search_user' && isset($_GET['term'])) {
        $term = "%{$_GET['term']}%";
        $stmt = $conn->prepare("SELECT user FROM balance WHERE user LIKE ? LIMIT 10");
        $stmt->bind_param("s", $term);
        $stmt->execute();
        $res = $stmt->get_result();
        $users = [];
        while ($row = $res->fetch_assoc()) $users[] = $row['user'];
        echo json_encode($users);
        exit;
    }

    // Modal transaction view
    if ($act == 'transactions' && isset($_GET['user'])) {
        $user = $_GET['user'];
        $stmt = $conn->prepare("SELECT * FROM transaction WHERE user=? ORDER BY id DESC");
        $stmt->bind_param("s", $user);
        $stmt->execute();
        $res = $stmt->get_result();
        echo "<h2 class='text-xl font-semibold mb-4 text-blue-300'>Transactions for: $user</h2>";
        if ($res->num_rows==0) echo "<p class='text-gray-300'>No transactions found.</p>";
        else {
            echo "<table class='min-w-full text-left border border-blue-700'><thead class='border-b border-blue-700'>
            <tr><th>Type</th><th>Amount</th><th>Old</th><th>New</th><th>Reason</th><th>Admin</th><th>Date</th></tr></thead><tbody>";
            while($t=$res->fetch_assoc()){
                echo "<tr class='border-b border-blue-800 hover:bg-[#003366]'>
                <td class='".($t['type']=='credit'?'text-green-400':'text-red-400')." font-semibold'>".ucfirst($t['type'])."</td>
                <td>".number_format($t['amount'],2)."</td>
                <td>".number_format($t['old_balance'],2)."</td>
                <td>".number_format($t['new_balance'],2)."</td>
                <td>".htmlspecialchars($t['reason'])."</td>
                <td>".htmlspecialchars($t['admin'])."</td>
                <td>".htmlspecialchars($t['created_at'])."</td></tr>";
            }
            echo "</tbody></table>";
        }
        $stmt->close();
        exit;
    }

    // Top search box filter
    if ($act == 'top_search' && isset($_GET['term'])) {
        $term = "%{$_GET['term']}%";

        // Balances
        $stmt = $conn->prepare("SELECT * FROM balance WHERE user LIKE ? ORDER BY id DESC");
        $stmt->bind_param("s",$term);
        $stmt->execute();
        $res_bal = $stmt->get_result();
        echo "<h2 class='text-xl font-semibold mb-4'>User Balances</h2>";
        if($res_bal->num_rows==0) echo "<p class='text-gray-300'>No users found.</p>";
        else {
            echo "<table class='min-w-full text-left'>
            <thead class='border-b border-blue-700'><tr><th>User</th><th>Amount</th><th class='text-center'>Action</th></tr></thead><tbody>";
            while($b=$res_bal->fetch_assoc()){
                echo "<tr class='border-b border-blue-800 hover:bg-[#003366]'>
                <td>".htmlspecialchars($b['user'])."</td>
                <td>".number_format($b['amount'],2)."</td>
                <td class='text-center'><button onclick=\"showModal('".htmlspecialchars($b['user'])."')\" class='bg-blue-600 hover:bg-blue-700 px-3 py-1 rounded text-sm'>View</button></td></tr>";
            }
            echo "</tbody></table>";
        }
        $stmt->close();

        // Transactions
        $stmt = $conn->prepare("SELECT * FROM transaction WHERE user LIKE ? ORDER BY id DESC LIMIT 20");
        $stmt->bind_param("s",$term);
        $stmt->execute();
        $res_trans = $stmt->get_result();
        echo "<h2 class='text-xl font-semibold mt-6 mb-4'>Recent Transactions</h2>";
        if($res_trans->num_rows==0) echo "<p class='text-gray-300'>No transactions found.</p>";
        else {
            echo "<table class='min-w-full text-left'>
            <thead class='border-b border-blue-700'><tr><th>User</th><th>Type</th><th>Amount</th><th>Old</th><th>New</th><th>Admin</th><th>Date</th></tr></thead><tbody>";
            while($t=$res_trans->fetch_assoc()){
                echo "<tr class='border-b border-blue-800 hover:bg-[#003366]'>
                <td>".htmlspecialchars($t['user'])."</td>
                <td class='".($t['type']=='credit'?'text-green-400':'text-red-400')." font-semibold'>".ucfirst($t['type'])."</td>
                <td>".number_format($t['amount'],2)."</td>
                <td>".number_format($t['old_balance'],2)."</td>
                <td>".number_format($t['new_balance'],2)."</td>
                <td>".htmlspecialchars($t['admin'])."</td>
                <td>".htmlspecialchars($t['created_at'])."</td></tr>";
            }
            echo "</tbody></table>";
        }
        $stmt->close();
        exit;
    }
}

// --- Handle fund/debit POST ---
$message = "";
if ($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['user'], $_POST['action'], $_POST['amount'])) {
    $user   = trim($_POST['user']);
    $action = strtolower(trim($_POST['action']));
    $amount = floatval($_POST['amount']);
    $reason = trim($_POST['reason'] ?? '');
    $admin  = $_SESSION['admin'];
    $date   = date('Y-m-d H:i:s');

    if ($user!=="" && $amount>0 && in_array($action,['credit','debit'])) {
        $stmt = $conn->prepare("SELECT amount FROM balance WHERE user=? LIMIT 1");
        $stmt->bind_param("s",$user);
        $stmt->execute();
        $result = $stmt->get_result();
        if ($result->num_rows==0) {
            $conn->query("INSERT INTO balance (user,amount) VALUES ('$user',0.00)");
            $current_balance = 0.00;
        } else $current_balance = floatval($result->fetch_assoc()['amount']);
        $stmt->close();

        if ($action=='credit') $new_balance = $current_balance + $amount;
        else {
            if ($current_balance<$amount) $message="<p class='text-red-500 font-semibold'>Insufficient funds for $user.</p>";
            $new_balance = $current_balance - $amount;
        }

        if (empty($message)) {
            $stmt = $conn->prepare("UPDATE balance SET amount=? WHERE user=?");
            $stmt->bind_param("ds",$new_balance,$user);
            $stmt->execute();
            $stmt->close();

            $stmt = $conn->prepare("INSERT INTO transaction (user,admin,type,amount,old_balance,new_balance,reason,created_at) VALUES (?,?,?,?,?,?,?,?)");
            $stmt->bind_param("sssdddss",$user,$admin,$action,$amount,$current_balance,$new_balance,$reason,$date);
            $stmt->execute();
            $stmt->close();

            $message="<p class='text-green-500 font-semibold'>".ucfirst($action)." successful for $user!</p>";
        }
    } else $message="<p class='text-red-500 font-semibold'>Invalid input!</p>";
}

// --- Fetch balances and transactions ---
$balances = $conn->query("SELECT * FROM balance ORDER BY id DESC");
$transactions = $conn->query("SELECT * FROM transaction ORDER BY id DESC LIMIT 20");
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Admin Dashboard</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-[#001f3f] text-white min-h-screen">
<div class="max-w-6xl mx-auto py-10 px-4">
<h1 class="text-3xl font-bold mb-6 text-center text-blue-300">Admin Dashboard</h1>

<!-- Top Search Box -->
<div class="mb-6 flex justify-center relative">
<input type="text" id="topSearch" placeholder="Search users or transactions..." class="w-2/3 p-2 rounded-l bg-[#003366] border border-blue-600 text-white">
<button onclick="performTopSearch()" class="bg-blue-600 hover:bg-blue-700 px-4 rounded-r font-semibold">Search</button>
</div>

<!-- Fund/Debit Form -->
<div class="bg-[#012a63] p-6 rounded-2xl shadow-lg mb-8 relative">
<h2 class="text-2xl font-semibold mb-4">Fund / Debit User</h2>
<?= $message ?>
<form method="POST" id="fundForm" class="grid md:grid-cols-2 gap-4">
  <div class="relative">
    <label class="block mb-1">User (type to search)</label>
    <input id="userInput" name="user" type="text" required autocomplete="off" class="w-full p-2 rounded bg-[#003366] border border-blue-600">
    <div id="userDropdown" class="absolute bg-[#012a63] border border-blue-600 rounded mt-1 w-full z-50 hidden"></div>
  </div>
  <div>
    <label class="block mb-1">Action</label>
    <select name="action" class="w-full p-2 rounded bg-[#003366] border border-blue-600">
      <option value="credit">Credit</option>
      <option value="debit">Debit</option>
    </select>
  </div>
  <div>
    <label class="block mb-1">Amount</label>
    <input name="amount" type="number" step="0.01" required class="w-full p-2 rounded bg-[#003366] border border-blue-600">
  </div>
  <div>
    <label class="block mb-1">Reason (optional)</label>
    <input name="reason" type="text" class="w-full p-2 rounded bg-[#003366] border border-blue-600">
  </div>
  <div class="md:col-span-2"><button type="submit" class="w-full bg-blue-600 hover:bg-blue-700 p-2 rounded font-semibold">Submit</button></div>
</form>
</div>

<!-- Results container -->
<div id="results">
<div class="bg-[#012a63] p-6 rounded-2xl shadow-lg mb-8 overflow-x-auto">
<h2 class="text-xl font-semibold mb-4">User Balances</h2>
<?php if ($balances->num_rows==0): ?>
<p class="text-gray-300">No users found.</p>
<?php else: ?>
<table class="min-w-full text-left">
<thead class="border-b border-blue-700"><tr><th>User</th><th>Amount</th><th class="text-center">Action</th></tr></thead>
<tbody>
<?php while($b=$balances->fetch_assoc()): ?>
<tr class="border-b border-blue-800 hover:bg-[#003366]">
<td><?= htmlspecialchars($b['user']) ?></td>
<td><?= number_format($b['amount'],2) ?></td>
<td class="text-center"><button onclick="showModal('<?= htmlspecialchars($b['user']) ?>')" class="bg-blue-600 hover:bg-blue-700 px-3 py-1 rounded text-sm">View</button></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php endif; ?>
</div>

<div class="bg-[#012a63] p-6 rounded-2xl shadow-lg overflow-x-auto">
<h2 class="text-xl font-semibold mb-4">Recent Transactions</h2>
<?php if($transactions->num_rows==0): ?>
<p class="text-gray-300">No transactions found.</p>
<?php else: ?>
<table class="min-w-full text-left">
<thead class="border-b border-blue-700"><tr><th>User</th><th>Type</th><th>Amount</th><th>Old</th><th>New</th><th>Admin</th><th>Date</th></tr></thead>
<tbody>
<?php while($t=$transactions->fetch_assoc()): ?>
<tr class="border-b border-blue-800 hover:bg-[#003366]">
<td><?= htmlspecialchars($t['user']) ?></td>
<td class="<?= $t['type']=='credit'?'text-green-400':'text-red-400' ?> font-semibold"><?= ucfirst($t['type']) ?></td>
<td><?= number_format($t['amount'],2) ?></td>
<td><?= number_format($t['old_balance'],2) ?></td>
<td><?= number_format($t['new_balance'],2) ?></td>
<td><?= htmlspecialchars($t['admin']) ?></td>
<td><?= htmlspecialchars($t['created_at']) ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>

<!-- Modal -->
<div id="userModal" class="hidden fixed inset-0 bg-black bg-opacity-70 flex items-center justify-center z-50">
  <div class="bg-[#012a63] rounded-xl w-11/12 md:w-2/3 max-h-[80vh] overflow-y-auto relative">
    <button onclick="closeModal()" class="absolute top-2 right-2 text-gray-400 hover:text-white text-2xl">&times;</button>
    <div id="modalContent" class="p-6 text-center">Loading...</div>
  </div>
</div>

<script>
// Prevent POST resubmission
if(window.history.replaceState) window.history.replaceState(null,null,window.location.href);

// Fund form autocomplete
const userInput = document.getElementById('userInput');
const userDropdown = document.getElementById('userDropdown');
userInput.addEventListener('input',function(){
  const val=this.value;
  if(!val){ userDropdown.style.display='none'; return; }
  fetch('?action=search_user&term='+encodeURIComponent(val))
    .then(res=>res.json())
    .then(users=>{
      userDropdown.innerHTML='';
      if(users.length===0){ userDropdown.style.display='none'; return; }
      users.forEach(user=>{
        const div=document.createElement('div');
        div.textContent=user;
        div.className='p-2 hover:bg-blue-700 cursor-pointer';
        div.addEventListener('click',()=>{ userInput.value=user; userDropdown.style.display='none'; });
        userDropdown.appendChild(div);
      });
      userDropdown.style.display='block';
    });
});
document.addEventListener('click',e=>{ if(!userInput.contains(e.target)&&!userDropdown.contains(e.target)) userDropdown.style.display='none'; });

// Modal functions
function showModal(user){
  const modal=document.getElementById('userModal');
  const content=document.getElementById('modalContent');
  modal.classList.remove('hidden');
  content.innerHTML="<div class='p-6 text-center text-gray-300'>Loading...</div>";
  fetch('?action=transactions&user='+encodeURIComponent(user))
    .then(res=>res.text()).then(html=>content.innerHTML=html)
    .catch(()=>content.innerHTML="<p class='text-red-400 text-center p-6'>Failed to load user details.</p>");
}
function closeModal(){ document.getElementById('userModal').classList.add('hidden'); }

// Top search AJAX
const topSearch = document.getElementById('topSearch');
topSearch.addEventListener('input',performTopSearch);
function performTopSearch(){
  const term = topSearch.value;
  fetch('?action=top_search&term='+encodeURIComponent(term))
    .then(res=>res.text())
    .then(html=>document.getElementById('results').innerHTML=html);
}
</script>
</body>
</html>