<?php
// ============================================================
// owner_panel.php — GRAY HACKER SECURITY Owner Dashboard
// ============================================================
session_start();
error_reporting(0);

$OWNER_WEB_PASS = 'slex@owner2024'; // Change this!

require_once __DIR__ . '/points.php';

// ── AUTH ─────────────────────────────────────────────────────
if (isset($_POST['login_pass'])) {
    if ($_POST['login_pass'] === $OWNER_WEB_PASS) {
        $_SESSION['owner_auth'] = true;
    } else {
        $login_error = '❌ Wrong password!';
    }
}
if (isset($_GET['logout'])) {
    session_destroy();
    header('Location: ' . basename(__FILE__));
    exit;
}

// ── SHOW LOGIN PAGE ───────────────────────────────────────────
if (!($_SESSION['owner_auth'] ?? false)):
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Owner Panel — GRAY HACKER SECURITY</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Inter',sans-serif;background:linear-gradient(135deg,#0f0c29,#302b63,#24243e);min-height:100vh;display:flex;align-items:center;justify-content:center}
.box{background:rgba(255,255,255,.05);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.1);border-radius:20px;padding:48px 40px;width:360px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.icon{font-size:52px;margin-bottom:16px}
h1{color:#fff;font-size:26px;font-weight:700;margin-bottom:6px}
p{color:rgba(255,255,255,.5);margin-bottom:28px;font-size:13px}
input[type=password]{width:100%;padding:14px 18px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:10px;color:#fff;font-size:15px;outline:none;margin-bottom:14px;transition:.2s;font-family:inherit}
input:focus{border-color:#6c63ff;background:rgba(108,99,255,.12)}
button{width:100%;padding:14px;background:linear-gradient(135deg,#6c63ff,#a855f7);border:none;border-radius:10px;color:#fff;font-size:16px;font-weight:700;cursor:pointer;transition:.2s;font-family:inherit}
button:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(108,99,255,.5)}
.err{background:rgba(239,68,68,.12);color:#f87171;border:1px solid rgba(239,68,68,.25);border-radius:8px;padding:10px 14px;margin-bottom:14px;font-size:14px}
</style>
</head>
<body>
<div class="box">
  <div class="icon">👑</div>
  <h1>Owner Panel</h1>
  <p>GRAY HACKER SECURITY Commercial System</p>
  <?php if (!empty($login_error)): ?>
  <div class="err"><?= htmlspecialchars($login_error) ?></div>
  <?php endif; ?>
  <form method="POST">
    <input type="password" name="login_pass" placeholder="Enter owner password" autofocus>
    <button type="submit">Login →</button>
  </form>
</div>
</body>
</html>
<?php exit; endif;

// ── HANDLE ACTIONS ────────────────────────────────────────────
$msg = ''; $msgType = 'success';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['action'])) {
    $users = readJSON($USERS_FILE);
    $action = $_POST['action'];

    if ($action === 'add_admin') {
        $tid = trim($_POST['telegram_id'] ?? '');
        if ($tid && ctype_digit($tid)) {
            $tid = (string)(int)$tid;
            if (!isset($users[$tid])) {
                $users[$tid] = [
                    'telegram_id' => (int)$tid,
                    'username'    => $_POST['username'] ?? '',
                    'full_name'   => $_POST['full_name'] ?? '',
                    'role'        => 'admin',
                    'points'      => 0,
                    'hold_points' => 0,
                    'is_active'   => true,
                    'created_at'  => date('Y-m-d H:i:s'),
                ];
                writeJSON($USERS_FILE, $users);
                $msg = "✅ Admin #$tid registered successfully!";
            } else {
                $msg = "ℹ️ Admin #$tid already exists."; $msgType = 'error';
            }
        } else { $msg = '❌ Invalid Telegram ID'; $msgType = 'error'; }
    }

    if ($action === 'add_points') {
        $tid = (string)(int)($_POST['telegram_id'] ?? 0);
        $amt = (int)($_POST['amount'] ?? 0);
        if ($tid && $amt > 0 && isset($users[$tid])) {
            $users[$tid]['points'] += $amt;
            writeJSON($USERS_FILE, $users);
            $avail = $users[$tid]['points'] - ($users[$tid]['hold_points'] ?? 0);
            $msg = "✅ Added $amt points to Admin #$tid. Available: $avail pts";
        } elseif (!isset($users[$tid])) {
            $msg = "❌ Admin #$tid not found. Register them first."; $msgType = 'error';
        } else { $msg = '❌ Invalid data'; $msgType = 'error'; }
    }

    if ($action === 'toggle_admin') {
        $tid = (string)(int)($_POST['telegram_id'] ?? 0);
        if (isset($users[$tid])) {
            $users[$tid]['is_active'] = !($users[$tid]['is_active'] ?? true);
            writeJSON($USERS_FILE, $users);
            $st = $users[$tid]['is_active'] ? 'ENABLED' : 'DISABLED';
            $msg = "✅ Admin #$tid $st";
        }
    }

    if ($action === 'delete_admin') {
        $tid = (string)(int)($_POST['telegram_id'] ?? 0);
        if (isset($users[$tid]) && $users[$tid]['role'] === 'admin') {
            unset($users[$tid]);
            writeJSON($USERS_FILE, $users);
            $msg = "✅ Admin #$tid deleted";
        }
    }

    if ($action === 'set_points') {
        $tid = (string)(int)($_POST['telegram_id'] ?? 0);
        $amt = (int)($_POST['amount'] ?? 0);
        if ($tid && isset($users[$tid]) && $amt >= 0) {
            $users[$tid]['points'] = $amt;
            writeJSON($USERS_FILE, $users);
            $msg = "✅ Points set to $amt for Admin #$tid";
        } else { $msg = '❌ Admin not found'; $msgType = 'error'; }
    }
}

// ── LOAD DATA ─────────────────────────────────────────────────
$users = readJSON($USERS_FILE);
$jobs  = readJSON($JOBS_FILE);

$admins = array_filter($users, function($u) { return ($u['role'] ?? '') === 'admin'; });

// Stats
$now = time();
$oneDay = 86400;
$stats24 = ['total'=>0,'successful'=>0,'failed'=>0,'in_progress'=>0];
$allStats = ['total'=>0,'successful'=>0,'pts_used'=>0];

foreach ($jobs as $j) {
    $allStats['total']++;
    if ($j['status'] === 'done') $allStats['successful']++;
    $allStats['pts_used'] += ($j['points_held'] ?? 0);

    $jTime = strtotime($j['started_at'] ?? '');
    if ($jTime && ($now - $jTime) < $oneDay) {
        $stats24['total']++;
        if ($j['status'] === 'done') $stats24['successful']++;
        elseif ($j['status'] === 'processing') $stats24['in_progress']++;
        elseif (in_array($j['status'], ['failed','timeout','refunded'])) $stats24['failed']++;
    }
}

// Recent jobs (last 15)
$recentJobs = array_slice(array_reverse($jobs), 0, 15);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Owner Panel — GRAY HACKER SECURITY</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root{--bg:#0a0a12;--surface:#111120;--card:#171728;--border:rgba(255,255,255,.08);--primary:#6c63ff;--primary2:#a855f7;--success:#22d3a5;--danger:#f87171;--warn:#fbbf24;--text:#e2e8f0;--muted:#94a3b8}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);min-height:100vh}
.nav{background:var(--surface);border-bottom:1px solid var(--border);padding:14px 28px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
.nav-brand{font-size:17px;font-weight:700;background:linear-gradient(135deg,var(--primary),var(--primary2));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.nav-logout{background:rgba(248,113,113,.12);color:var(--danger);border:1px solid rgba(248,113,113,.2);padding:8px 16px;border-radius:8px;font-size:13px;font-weight:600;text-decoration:none}
.wrap{max-width:1280px;margin:0 auto;padding:28px 20px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:28px}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:22px;text-align:center}
.stat-num{font-size:34px;font-weight:800;margin-bottom:4px}
.stat-label{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.8px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px}
.panel{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:22px}
.panel-title{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.8px;margin-bottom:16px}
.form-group{margin-bottom:12px}
label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px;font-weight:500}
input[type=number],input[type=text]{width:100%;background:rgba(255,255,255,.05);border:1px solid var(--border);border-radius:8px;padding:10px 14px;color:var(--text);font-size:14px;outline:none;font-family:inherit;transition:.2s}
input:focus{border-color:var(--primary);background:rgba(108,99,255,.08)}
.btn{padding:10px 18px;border-radius:8px;border:none;font-size:13px;font-weight:600;cursor:pointer;transition:.2s;font-family:inherit;display:inline-block}
.btn-primary{background:linear-gradient(135deg,var(--primary),var(--primary2));color:#fff;width:100%;margin-top:4px}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(108,99,255,.4)}
.btn-sm{padding:5px 12px;font-size:12px;width:auto}
.btn-danger{background:rgba(248,113,113,.1);color:var(--danger);border:1px solid rgba(248,113,113,.2)}
.btn-warn{background:rgba(251,191,36,.1);color:var(--warn);border:1px solid rgba(251,191,36,.2)}
.btn-success{background:rgba(34,211,165,.1);color:var(--success);border:1px solid rgba(34,211,165,.2)}
.admin-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:10px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.admin-info{flex:1;min-width:160px}
.admin-name{font-weight:600;font-size:14px;margin-bottom:3px}
.admin-meta{color:var(--muted);font-size:12px}
.admin-pts{font-size:26px;font-weight:800;color:var(--success);text-align:center;min-width:70px}
.admin-pts small{display:block;font-size:11px;color:var(--muted);font-weight:400}
.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;margin-right:6px}
.badge-on{background:rgba(34,211,165,.12);color:var(--success);border:1px solid rgba(34,211,165,.2)}
.badge-off{background:rgba(248,113,113,.12);color:var(--danger);border:1px solid rgba(248,113,113,.2)}
.full{grid-column:1/-1}
table{width:100%;border-collapse:collapse}
th{text-align:left;padding:10px 12px;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border)}
td{padding:10px 12px;font-size:13px;border-bottom:1px solid rgba(255,255,255,.04)}
tr:last-child td{border:none}
.s-done{color:var(--success)}.s-processing{color:var(--warn)}.s-failed,.s-timeout,.s-refunded{color:var(--danger)}
.alert{padding:12px 18px;border-radius:10px;font-size:14px;margin-bottom:20px;border:1px solid}
.alert-success{background:rgba(34,211,165,.08);color:var(--success);border-color:rgba(34,211,165,.2)}
.alert-error{background:rgba(248,113,113,.08);color:var(--danger);border-color:rgba(248,113,113,.2)}
@media(max-width:900px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-2{grid-template-columns:1fr}}
@media(max-width:600px){.grid-4{grid-template-columns:1fr}}
</style>
</head>
<body>

<nav class="nav">
  <div class="nav-brand">👑 GRAY HACKER SECURITY Owner Panel</div>
  <a href="?logout=1" class="nav-logout">Logout →</a>
</nav>

<div class="wrap">

<?php if ($msg): ?>
<div class="alert alert-<?= $msgType ?>"><?= htmlspecialchars($msg) ?></div>
<?php endif; ?>

<!-- Stats -->
<div class="grid-4">
  <div class="stat-card">
    <div class="stat-num" style="color:var(--success)"><?= $stats24['successful'] ?></div>
    <div class="stat-label">✅ Protected (24h)</div>
  </div>
  <div class="stat-card">
    <div class="stat-num" style="color:var(--warn)"><?= $stats24['in_progress'] ?></div>
    <div class="stat-label">⏳ In Progress</div>
  </div>
  <div class="stat-card">
    <div class="stat-num" style="color:var(--danger)"><?= $stats24['failed'] ?></div>
    <div class="stat-label">❌ Failed (24h)</div>
  </div>
  <div class="stat-card">
    <div class="stat-num" style="color:var(--primary)"><?= $allStats['total'] ?></div>
    <div class="stat-label">📦 All Time Jobs</div>
  </div>
</div>

<div class="grid-2">

  <!-- Add Admin -->
  <div class="panel">
    <div class="panel-title">➕ Register New Admin</div>
    <form method="POST">
      <input type="hidden" name="action" value="add_admin">
      <div class="form-group">
        <label>Telegram User ID</label>
        <input type="number" name="telegram_id" placeholder="e.g. 123456789" required>
      </div>
      <div class="form-group">
        <label>Username (optional)</label>
        <input type="text" name="username" placeholder="@username">
      </div>
      <button class="btn btn-primary" type="submit">Register Admin</button>
    </form>
  </div>

  <!-- Add Points -->
  <div class="panel">
    <div class="panel-title">💰 Add Points to Admin</div>
    <form method="POST">
      <input type="hidden" name="action" value="add_points">
      <div class="form-group">
        <label>Admin Telegram ID</label>
        <input type="number" name="telegram_id" placeholder="e.g. 123456789" required>
      </div>
      <div class="form-group">
        <label>Points to Add</label>
        <input type="number" name="amount" placeholder="e.g. 500" min="1" required>
      </div>
      <button class="btn btn-primary" type="submit">Add Points</button>
    </form>
  </div>

  <!-- Admins List -->
  <div class="panel full">
    <div class="panel-title">👥 Admins (<?= count($admins) ?>)</div>
    <?php if (empty($admins)): ?>
      <p style="color:var(--muted);text-align:center;padding:24px">No admins registered yet. Add one above.</p>
    <?php else: ?>
      <?php foreach ($admins as $tid => $a):
        $avail  = max(0, ($a['points'] ?? 0) - ($a['hold_points'] ?? 0));
        $active = $a['is_active'] ?? true;
      ?>
      <div class="admin-card">
        <div class="admin-info">
          <div class="admin-name">
            <?= $active ? '<span class="badge badge-on">ON</span>' : '<span class="badge badge-off">OFF</span>' ?>
            <?= htmlspecialchars($a['username'] ? '@'.$a['username'] : 'ID: '.$a['telegram_id']) ?>
          </div>
          <div class="admin-meta">
            Telegram ID: <strong><?= $a['telegram_id'] ?></strong> &nbsp;|&nbsp;
            On Hold: <?= $a['hold_points'] ?? 0 ?> pts &nbsp;|&nbsp;
            Joined: <?= date('d M Y', strtotime($a['created_at'])) ?>
          </div>
        </div>
        <div class="admin-pts"><?= $avail ?><small>available pts</small></div>
        <div style="display:flex;gap:6px;flex-wrap:wrap">
          <form method="POST" style="display:inline">
            <input type="hidden" name="action" value="toggle_admin">
            <input type="hidden" name="telegram_id" value="<?= $a['telegram_id'] ?>">
            <button class="btn btn-sm btn-warn" type="submit"><?= $active ? 'Disable' : 'Enable' ?></button>
          </form>
          <form method="POST" style="display:inline" onsubmit="return confirm('Delete admin #<?= $a['telegram_id'] ?>?')">
            <input type="hidden" name="action" value="delete_admin">
            <input type="hidden" name="telegram_id" value="<?= $a['telegram_id'] ?>">
            <button class="btn btn-sm btn-danger" type="submit">Delete</button>
          </form>
        </div>
      </div>
      <?php endforeach; ?>
    <?php endif; ?>
  </div>

  <!-- Recent Jobs -->
  <div class="panel full">
    <div class="panel-title">📋 Recent Jobs (Last 15)</div>
    <?php if (empty($recentJobs)): ?>
      <p style="color:var(--muted);text-align:center;padding:24px">No protection jobs yet.</p>
    <?php else: ?>
    <div style="overflow-x:auto">
    <table>
      <thead>
        <tr><th>#</th><th>APK</th><th>Admin</th><th>Status</th><th>Points</th><th>Date</th></tr>
      </thead>
      <tbody>
        <?php foreach ($recentJobs as $j): ?>
        <tr>
          <td style="color:var(--muted)"><?= $j['id'] ?? '-' ?></td>
          <td><?= htmlspecialchars(basename($j['apk_name'] ?? '-')) ?></td>
          <td style="color:var(--muted)"><?= $j['telegram_id'] ?? '-' ?></td>
          <td><span class="s-<?= $j['status'] ?? 'unknown' ?>"><?= strtoupper($j['status'] ?? '?') ?></span></td>
          <td><?= $j['points_held'] ?? 0 ?></td>
          <td style="color:var(--muted)"><?= isset($j['started_at']) ? date('d M H:i', strtotime($j['started_at'])) : '-' ?></td>
        </tr>
        <?php endforeach; ?>
      </tbody>
    </table>
    </div>
    <?php endif; ?>
  </div>

</div><!-- grid-2 -->
</div><!-- wrap -->
</body>
</html>
