<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MAFIYA Admin</title>
<style>
  * { box-sizing: border-box; }
  body { margin: 0; font-family: 'Segoe UI', sans-serif; background: radial-gradient(circle at top, #1a0000, #000); color: #e0e0e0; padding: 20px; min-height: 100vh; }
  h1 { color: #ff3333; text-align: center; margin: 0 0 5px; letter-spacing: 3px; text-transform: uppercase; }
  .sub { text-align: center; color: #888; font-size: 12px; margin-bottom: 25px; }
  .wrap { max-width: 1200px; margin: 0 auto; }
  .card { background: #0f0f0f; border: 1px solid #333; border-radius: 10px; padding: 20px; margin-bottom: 20px; box-shadow: 0 4px 20px rgba(255,0,0,0.1); }
  .card h2 { margin: 0 0 15px; color: #ffcc00; font-size: 16px; border-bottom: 1px solid #333; padding-bottom: 8px; }
  .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; }
  label { display: block; font-size: 11px; color: #aaa; margin-bottom: 4px; text-transform: uppercase; }
  input, select { width: 100%; padding: 9px; border-radius: 5px; border: 1px solid #444; background: #1a1a1a; color: #fff; font-size: 13px; }
  input:focus, select:focus { outline: none; border-color: #ff3333; }
  button { padding: 9px 16px; border: none; border-radius: 5px; color: #fff; font-weight: bold; cursor: pointer; font-size: 13px; transition: 0.2s; }
  button:hover { transform: translateY(-1px); }
  button:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
  .btn-primary { background: linear-gradient(45deg,#0052D4,#4364F7); }
  .btn-green { background: linear-gradient(45deg,#00c853,#00e676); }
  .btn-red { background: linear-gradient(45deg,#b71c1c,#f44336); }
  .btn-orange { background: linear-gradient(45deg,#e65100,#ff9800); }
  .btn-gray { background: #555; }
  .btn-sm { padding: 5px 10px; font-size: 11px; }
  table { width: 100%; border-collapse: collapse; font-size: 12px; }
  th, td { padding: 8px; border-bottom: 1px solid #222; text-align: left; }
  th { background: #1a1a1a; color: #ffcc00; font-size: 11px; text-transform: uppercase; }
  tr:hover { background: #151515; }
  .status { padding: 3px 8px; border-radius: 4px; font-size: 10px; font-weight: bold; text-transform: uppercase; }
  .st-active { background: #00c85333; color: #00e676; }
  .st-expired { background: #ff980033; color: #ff9800; }
  .st-banned { background: #f4433633; color: #f44336; }
  .st-pending { background: #55555533; color: #aaa; }
  .key-cell { font-family: monospace; color: #00ff00; font-size: 11px; cursor: pointer; }
  .key-cell:hover { text-decoration: underline; }
  .toast { position: fixed; top: 20px; right: 20px; padding: 12px 20px; border-radius: 6px; color: #fff; font-weight: bold; z-index: 999; display: none; }
  .toast.ok { background: #00c853; } .toast.err { background: #f44336; }
  .toolbar { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
  .toolbar input { max-width: 220px; }
  .empty { text-align: center; color: #666; padding: 30px; font-style: italic; }
  .cfg-grid { display: grid; grid-template-columns: 1fr 2fr; gap: 8px; align-items: center; }
  .note { font-size: 11px; color: #888; margin-top: 8px; }
  #loginScreen { max-width: 360px; margin: 120px auto; }
  #loginScreen input { margin-bottom: 12px; text-align: center; font-size: 16px; padding: 12px; }
  #adminApp { display: none; }
</style>
</head>
<body>

<!-- ===== LOGIN SCREEN ===== -->
<div id="loginScreen" class="card">
  <h1 style="font-size:22px;">⚡ MAFIYA ADMIN</h1>
  <p class="sub">Enter password to continue</p>
  <input id="loginPass" type="password" placeholder="Password" onkeydown="if(event.key==='Enter')doLogin()">
  <button class="btn-green" style="width:100%" onclick="doLogin()">Login</button>
  <p class="note" style="text-align:center;">Password tomar config.php te set kora ache</p>
</div>

<!-- ===== MAIN APP ===== -->
<div id="adminApp">
<div class="wrap">
  <h1>⚡ MAFIYA ADMIN</h1>
  <p class="sub">BM Creator License Management Panel</p>

  <div class="card">
    <h2>🔑 Issue / Renew License</h2>
    <div class="grid">
      <div><label>Gmail</label><input id="isEmail" type="email" placeholder="customer@gmail.com"></div>
      <div><label>Days</label><input id="isDays" type="number" value="7" min="1"></div>
      <div><label>Max Browser</label><input id="isBrowser" type="number" value="15" min="1"></div>
      <div style="display:flex;align-items:flex-end;"><button class="btn-green" id="issueBtn" style="width:100%">Generate Key</button></div>
    </div>
    <p class="note" id="issueResult"></p>
  </div>

  <div class="card">
    <h2>⚙️ Payment & Pricing Config</h2>
    <div class="cfg-grid">
      <label>Bkash</label>      <input id="cfBkash" type="text">
      <label>Nagad</label>      <input id="cfNagad" type="text">
      <label>Rocket</label>     <input id="cfRocket" type="text">
      <label>Binance</label>    <input id="cfBinance" type="text">
      <label>Pricing (days:price:browser,...)</label> <input id="cfPricing" type="text">
    </div>
    <div style="margin-top:12px;"><button class="btn-primary" onclick="saveConfig()">Save Config</button></div>
  </div>

  <div class="card">
    <h2>👥 Users</h2>
    <div class="toolbar">
      <input id="searchBox" type="text" placeholder="🔍 Search gmail or key..." oninput="renderUsers()">
      <button class="btn-gray" onclick="loadUsers()">🔄 Refresh</button>
      <button class="btn-red" onclick="logout()" style="margin-left:auto;">Logout</button>
    </div>
    <div id="userTableWrap"><div class="empty">Loading...</div></div>
  </div>
</div>
</div>

<div id="toast" class="toast"></div>

<script>
let ADMIN_PASS = sessionStorage.getItem('mafiya_pass') || '';
let USERS = [];

/* ---------- Helpers ---------- */
function toast(msg, ok) {
  const t = document.getElementById('toast');
  t.innerText = msg;
  t.className = 'toast ' + (ok ? 'ok' : 'err');
  t.style.display = 'block';
  setTimeout(() => t.style.display = 'none', 3000);
}
function esc(s) { return String(s == null ? '' : s).replace(/[&<>"]/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c])); }

async function post(action, data = {}) {
  const fd = new FormData();
  fd.append('pass', ADMIN_PASS);
  Object.keys(data).forEach(k => fd.append(k, data[k]));
  const res = await fetch('admin.php?action=' + action, { method: 'POST', body: fd });
  const json = await res.json();
  if (json.status === 'error' && json.message === 'Unauthorized') {
    toast('Unauthorized — please login again', false);
    logout();
  }
  return json;
}

/* ---------- Login ---------- */
async function doLogin() {
  const p = document.getElementById('loginPass').value;
  if (!p) return toast('Enter password', false);
  ADMIN_PASS = p;
  const r = await post('list_users');
  if (r.status === 'success') {
    sessionStorage.setItem('mafiya_pass', p);
    document.getElementById('loginScreen').style.display = 'none';
    document.getElementById('adminApp').style.display = 'block';
    USERS = r.users;
    renderUsers();
    loadConfig();
  } else {
    toast('Wrong password', false);
    ADMIN_PASS = '';
  }
}
function logout() {
  sessionStorage.removeItem('mafiya_pass');
  location.reload();
}

/* ---------- Issue ---------- */
document.getElementById('issueBtn').onclick = async () => {
  const email   = document.getElementById('isEmail').value.trim();
  const days    = document.getElementById('isDays').value;
  const browser = document.getElementById('isBrowser').value;
  if (!email) return toast('Enter Gmail', false);
  const btn = event.target; btn.disabled = true; btn.innerText = 'Working...';
  const r = await post('issue_license', { email, days, browser });
  btn.disabled = false; btn.innerText = 'Generate Key';
  if (r.status === 'success') {
    document.getElementById('issueResult').innerHTML =
      '✅ Key: <b style="color:#00ff00;font-family:monospace">' + esc(r.key) + '</b> | Expiry: ' + esc(r.expiry);
    toast('License issued!', true);
    loadUsers();
  } else {
    toast(r.message || 'Failed', false);
  }
};

/* ---------- Config ---------- */
async function loadConfig() {
  const r = await post('get_config');
  if (r.status === 'success') {
    const c = r.config || {};
    document.getElementById('cfBkash').value   = c.bkash   || '';
    document.getElementById('cfNagad').value   = c.nagad   || '';
    document.getElementById('cfRocket').value  = c.rocket  || '';
    document.getElementById('cfBinance').value = c.binance || '';
    document.getElementById('cfPricing').value = c.pricing || '';
  }
}
async function saveConfig() {
  const data = {
    bkash:   document.getElementById('cfBkash').value.trim(),
    nagad:   document.getElementById('cfNagad').value.trim(),
    rocket:  document.getElementById('cfRocket').value.trim(),
    binance: document.getElementById('cfBinance').value.trim(),
    pricing: document.getElementById('cfPricing').value.trim()
  };
  const r = await post('save_config', data);
  toast(r.status === 'success' ? 'Config saved!' : (r.message || 'Failed'), r.status === 'success');
}

/* ---------- Users ---------- */
async function loadUsers() {
  document.getElementById('userTableWrap').innerHTML = '<div class="empty">Loading...</div>';
  const r = await post('list_users');
  if (r.status === 'success') { USERS = r.users; renderUsers(); }
  else document.getElementById('userTableWrap').innerHTML = '<div class="empty">Error: ' + esc(r.message) + '</div>';
}
function renderUsers() {
  const q = (document.getElementById('searchBox').value || '').toLowerCase();
  const rows = USERS.filter(u =>
    !q || (u.gmail || '').toLowerCase().includes(q) || (u.key || '').toLowerCase().includes(q)
  );
  if (!rows.length) { document.getElementById('userTableWrap').innerHTML = '<div class="empty">No users found.</div>'; return; }
  let html = '<table><thead><tr><th>Gmail</th><th>Key</th><th>Plan</th><th>Browser</th><th>Start</th><th>Expiry</th><th>Status</th><th>Actions</th></tr></thead><tbody>';
  rows.forEach(u => {
    const stClass = 'st-' + (u.status || 'pending');
    html += '<tr>' +
      '<td>' + esc(u.gmail) + '</td>' +
      '<td class="key-cell" onclick="copyKey(\'' + esc(u.key) + '\')" title="Click to copy">' + esc(u.key || '—') + '</td>' +
      '<td>' + esc(u.planDays || 0) + 'd</td>' +
      '<td>' + esc(u.usedBrowser) + '/' + esc(u.maxBrowser || 0) + '</td>' +
      '<td>' + esc(u.startDate || '—') + '</td>' +
      '<td>' + esc(u.expiry || '—') + '</td>' +
      '<td><span class="status ' + stClass + '">' + esc(u.status) + '</span></td>' +
      '<td style="white-space:nowrap">' +
        '<button class="btn-orange btn-sm" onclick="extend(\'' + esc(u.gmail) + '\')">+Days</button> ' +
        '<button class="btn-primary btn-sm" onclick="resetBrowser(\'' + esc(u.gmail) + '\')">Reset</button> ' +
        (u.status === 'active'
          ? '<button class="btn-gray btn-sm" onclick="setStatus(\'' + esc(u.gmail) + '\',\'banned\')">Ban</button>'
          : '<button class="btn-green btn-sm" onclick="setStatus(\'' + esc(u.gmail) + '\',\'active\')">Unban</button>') + ' ' +
        '<button class="btn-red btn-sm" onclick="delUser(\'' + esc(u.gmail) + '\')">🗑</button>' +
      '</td></tr>';
  });
  html += '</tbody></table>';
  document.getElementById('userTableWrap').innerHTML = html;
}

/* ---------- Actions ---------- */
function copyKey(key) { if (!key) return; navigator.clipboard.writeText(key).then(() => toast('Key copied!', true)); }
async function extend(email) {
  const d = prompt('Extra days?', '7'); if (!d) return;
  const r = await post('extend', { email, days: d });
  toast(r.status === 'success' ? 'Extended!' : (r.message || 'Failed'), r.status === 'success');
  if (r.status === 'success') loadUsers();
}
async function resetBrowser(email) {
  if (!confirm('Reset browser limit for ' + email + '?')) return;
  const r = await post('reset_browser', { email });
  toast(r.status === 'success' ? 'Browser reset!' : (r.message || 'Failed'), r.status === 'success');
  if (r.status === 'success') loadUsers();
}
async function setStatus(email, st) {
  const r = await post('set_status', { email, status: st });
  toast(r.status === 'success' ? ('Status = ' + st) : (r.message || 'Failed'), r.status === 'success');
  if (r.status === 'success') loadUsers();
}
async function delUser(email) {
  if (!confirm('Delete ' + email + '? This cannot be undone.')) return;
  const r = await post('delete_user', { email });
  toast(r.status === 'success' ? 'Deleted' : (r.message || 'Failed'), r.status === 'success');
  if (r.status === 'success') loadUsers();
}

/* ---------- Auto login if session exists ---------- */
window.addEventListener('DOMContentLoaded', async () => {
  if (ADMIN_PASS) {
    const r = await post('list_users');
    if (r.status === 'success') {
      document.getElementById('loginScreen').style.display = 'none';
      document.getElementById('adminApp').style.display = 'block';
      USERS = r.users; renderUsers(); loadConfig();
    }
  }
});
</script>
</body>
</html>