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

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

$conn = new mysqli("localhost","nassrrkx_Asovtu","nassrrkx_Asovtu","nassrrkx_Asovtu");
if ($conn->connect_error) die("DB Error");

// FIX BAD DATA (IMPORTANT)
$conn->query("UPDATE balance SET amount = 0 WHERE amount IS NULL OR amount = ''");
$conn->query("UPDATE transaction SET amount = 0 WHERE amount IS NULL OR amount = ''");

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

$conn->query("CREATE TABLE IF NOT EXISTS transaction (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user VARCHAR(100)
)");

$cols = [
 'admin'=>"VARCHAR(100)",
 'type'=>"ENUM('credit','debit')",
 'amount'=>"DECIMAL(15,2)",
 'old_balance'=>"DECIMAL(15,2)",
 'new_balance'=>"DECIMAL(15,2)",
 'reason'=>"VARCHAR(255)",
 'created_at'=>"DATETIME DEFAULT CURRENT_TIMESTAMP"
];

foreach($cols as $c=>$d){
 $check=$conn->query("SHOW COLUMNS FROM transaction LIKE '$c'");
 if($check->num_rows==0) $conn->query("ALTER TABLE transaction ADD $c $d");
}

// SAFE FORMAT FUNCTION
function naira($value){
    return number_format((float)($value ?? 0), 2);
}

// STATS
$totalUsers = $conn->query("SELECT COUNT(*) as c FROM balance")->fetch_assoc()['c'];
$totalBalance = $conn->query("SELECT SUM(amount) as s FROM balance")->fetch_assoc()['s'] ?? 0;
$totalTransactions = $conn->query("SELECT COUNT(*) as c FROM transaction")->fetch_assoc()['c'];

// AJAX
if(isset($_GET['action'])){

if($_GET['action']=='search_user'){
$term="%".$_GET['term']."%";
$res=$conn->query("SELECT user FROM balance WHERE user LIKE '$term' LIMIT 10");
$data=[];
while($r=$res->fetch_assoc()) $data[]=$r['user'];
echo json_encode($data); exit;
}

if($_GET['action']=='transactions'){
$user=$_GET['user'];
$res=$conn->query("SELECT * FROM transaction WHERE user='$user' ORDER BY id DESC");

echo "<h2 class='text-xl font-bold mb-4'>Transactions for $user</h2>";

while($t=$res->fetch_assoc()){
echo "<div class='flex justify-between bg-slate-800 p-3 rounded mb-2'>
<div>
<b>".ucfirst($t['type'])."</b><br>
<small>".$t['created_at']."</small>
</div>
<div class='".($t['type']=='credit'?'text-green-400':'text-red-400')." font-bold'>
₦".naira($t['amount'])."
</div>
</div>";
}
exit;
}

if($_GET['action']=='top_search'){
$term="%".$_GET['term']."%";
$res=$conn->query("SELECT * FROM balance WHERE user LIKE '$term'");
while($b=$res->fetch_assoc()){
echo "<div class='flex justify-between p-2 hover:bg-white/10 cursor-pointer' onclick=\"showModal('".$b['user']."')\">
<span>".$b['user']."</span>
<span>₦".naira($b['amount'])."</span>
</div>";
}
exit;
}
}

// PROCESS
$message="";
if($_SERVER['REQUEST_METHOD']=="POST"){

$user=trim($_POST['user']);
$action=$_POST['action'];
$amount=(float)$_POST['amount'];
$reason=$_POST['reason'];
$admin=$_SESSION['admin'];

$res=$conn->query("SELECT amount FROM balance WHERE user='$user'");
if($res->num_rows==0){
$conn->query("INSERT INTO balance(user,amount) VALUES('$user',0)");
$current=0;
}else{
$current=(float)$res->fetch_assoc()['amount'];
}

// VALIDATION
if($action=='debit' && $amount > $current){
$message="Insufficient balance!";
$type="error";
}else{

$new = ($action=='credit') ? $current + $amount : $current - $amount;

$conn->query("UPDATE balance SET amount='$new' WHERE user='$user'");
$conn->query("INSERT INTO transaction(user,admin,type,amount,old_balance,new_balance,reason)
VALUES('$user','$admin','$action','$amount','$current','$new','$reason')");

$message="Transaction successful!";
$type="success";
}
}

// FETCH
$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>
<head>
<meta charset="UTF-8">
<title>Admin Pro</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>

<body class="bg-gradient-to-br from-slate-900 via-blue-900 to-slate-800 text-white">

<div class="max-w-7xl mx-auto p-6">

<h1 class="text-3xl font-bold mb-6">🚀 Admin Pro Dashboard</h1>

<!-- STATS -->
<div class="grid md:grid-cols-3 gap-4 mb-6">

<div class="bg-blue-600 p-5 rounded-xl">
<h2>Total Users</h2>
<p class="text-2xl font-bold"><?= $totalUsers ?></p>
</div>

<div class="bg-green-600 p-5 rounded-xl">
<h2>Total Balance</h2>
<p class="text-2xl font-bold">₦<?= naira($totalBalance) ?></p>
</div>

<div class="bg-purple-600 p-5 rounded-xl">
<h2>Transactions</h2>
<p class="text-2xl font-bold"><?= $totalTransactions ?></p>
</div>

</div>

<!-- SEARCH -->
<input id="topSearch" placeholder="Search users..."
class="w-full p-3 rounded-xl bg-white/10 mb-6">

<div id="searchResults" class="bg-white/10 rounded mb-6"></div>

<!-- FORM -->
<div class="bg-white/10 p-6 rounded-xl mb-6">
<form method="POST" class="grid md:grid-cols-2 gap-4">

<input name="user" placeholder="User" required class="p-3 rounded bg-black/30">
<select name="action" class="p-3 rounded bg-black/30">
<option value="credit">Credit</option>
<option value="debit">Debit</option>
</select>

<input name="amount" type="number" step="0.01" placeholder="Amount" required class="p-3 rounded bg-black/30">
<input name="reason" placeholder="Reason" class="p-3 rounded bg-black/30">

<button class="bg-blue-600 p-3 rounded col-span-2">Submit</button>

</form>
</div>

<!-- BALANCES -->
<div class="bg-white/10 p-6 rounded-xl mb-6">
<h2 class="mb-4 font-bold">Users</h2>

<?php while($b=$balances->fetch_assoc()): ?>
<div class="flex justify-between p-2 border-b hover:bg-white/5">
<span><?= htmlspecialchars($b['user']) ?></span>
<span>₦<?= naira($b['amount']) ?></span>
</div>
<?php endwhile; ?>

</div>

<!-- TRANSACTIONS -->
<div class="bg-white/10 p-6 rounded-xl">
<h2 class="mb-4 font-bold">Recent Transactions</h2>

<?php while($t=$transactions->fetch_assoc()): ?>
<div class="flex justify-between p-2 border-b">

<span><?= htmlspecialchars($t['user']) ?></span>

<span class="<?= $t['type']=='credit'?'text-green-400':'text-red-400' ?>">
<?= ucfirst($t['type']) ?>
</span>

<span>₦<?= naira($t['amount']) ?></span>

</div>
<?php endwhile; ?>

</div>

</div>

<!-- MODAL -->
<div id="modal" class="hidden fixed inset-0 bg-black/80 flex items-center justify-center">
<div class="bg-slate-900 p-6 rounded-xl w-96">
<div id="modalContent">Loading...</div>
<button onclick="closeModal()" class="mt-4 bg-red-500 px-3 py-1 rounded">Close</button>
</div>
</div>

<!-- TOAST -->
<div id="toast" class="hidden fixed top-5 right-5 px-4 py-2 rounded shadow"></div>

<script>
// SEARCH
document.getElementById('topSearch').addEventListener('input',function(){
fetch('?action=top_search&term='+this.value)
.then(r=>r.text())
.then(d=>document.getElementById('searchResults').innerHTML=d);
});

// MODAL
function showModal(user){
document.getElementById('modal').classList.remove('hidden');
fetch('?action=transactions&user='+user)
.then(r=>r.text())
.then(d=>document.getElementById('modalContent').innerHTML=d);
}

function closeModal(){
document.getElementById('modal').classList.add('hidden');
}

// TOAST
<?php if(!empty($message)): ?>
let toast=document.getElementById('toast');
toast.innerText="<?= $message ?>";
toast.classList.remove('hidden');
toast.classList.add("<?= isset($type) && $type=='error' ? 'bg-red-500' : 'bg-green-500' ?>");
setTimeout(()=>toast.classList.add('hidden'),3000);
<?php endif; ?>
</script>

</body>
</html>