"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { useOmni } from "@/components/OmniSyncProvider"; interface Tenant { id: string; name: string; licenseNumber?: string; licenses?: string | Record; brandColor?: string; platformName?: string; securityTier?: string; } interface User { id: string; email: string; role: string; licenses?: string | Record; byokEnabled?: boolean; byokKey?: string; createdAt: string; } interface Feature { key: string; name: string; module?: string; } interface Package { id: string; name: string; price: string; features: string; } export default function AdminDashboard() { const {} = useOmni(); const [tenant, setTenant] = useState(null); const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [systemFeatures, setSystemFeatures] = useState([]); const [activeTab, setActiveTab] = useState('users'); const [debugError, setDebugError] = useState(null); const [showAddUserModal, setShowAddUserModal] = useState(false); const [showLimitsModal, setShowLimitsModal] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const [userLicenses, setUserLicenses] = useState>({}); const [newEmail, setNewEmail] = useState(""); const [newPassword, setNewPassword] = useState(""); const [packages, setPackages] = useState([]); const [checkoutLoading, setCheckoutLoading] = useState(false); // BYOK States const [orgByokEnabled, setOrgByokEnabled] = useState(false); const [orgByokKey, setOrgByokKey] = useState(""); const [userByokEnabled, setUserByokEnabled] = useState(false); const [userByokKey, setUserByokKey] = useState(""); // Quantum Toast System const [toast, setToast] = useState<{message: string, type: 'success' | 'error'} | null>(null); const showToast = (message: string, type: 'success' | 'error' = 'success') => { setToast({ message, type }); setTimeout(() => setToast(null), 4000); }; const router = useRouter(); const handleLogout = async () => { try { await fetch('/api/auth/logout', { method: 'POST' }); window.location.href = '/'; } catch (e) { console.error("Logout failed", e); window.location.href = '/'; } }; const fetchData = async () => { try { const resp = await fetch("/api/admin", { cache: "no-store" }); const data = await resp.json(); if (data.error) { window.location.href = window.location.pathname.replace('/admin', '/dashboard'); } else { setTenant(data.tenant); setOrgByokEnabled(data.tenant.byokEnabled || false); setOrgByokKey(data.tenant.byokKey || ""); setUsers(data.users); setSystemFeatures(data.systemFeatures || []); // Fetch Packages for Billing const pResp = await fetch("/api/superadmin/packages"); const pData = await pResp.json(); setPackages(pData.packages || []); } } catch (e: any) { console.error(e); setDebugError(e.message || "Unknown error occurred"); } finally { setLoading(false); } }; useEffect(() => { const init = async () => { await fetchData(); }; init(); }, []); const handleAddUser = async (e: React.FormEvent) => { e.preventDefault(); try { const resp = await fetch("/api/admin", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action: "add_user", email: newEmail, password: newPassword, role: "user" }) }); const data = await resp.json(); if (data.success) { setUsers([...users, data.user]); setShowAddUserModal(false); setNewEmail(""); setNewPassword(""); showToast("Employee added successfully."); } else { showToast("Failed: " + data.error, "error"); } } catch (_e) { showToast("Server error.", "error"); } }; const handleOpenLimits = (u: User) => { setSelectedUser(u); try { let parsed: Record = {}; if (typeof u.licenses === 'string') { const js = JSON.parse(u.licenses); if (Array.isArray(js)) js.forEach((k: string) => parsed[k] = "GRANTED"); else parsed = js; } else if (u.licenses && typeof u.licenses === 'object') { if (Array.isArray(u.licenses)) u.licenses.forEach((k: string) => parsed[k] = "GRANTED"); else parsed = u.licenses; } setUserLicenses(parsed); setUserByokEnabled(u.byokEnabled || false); setUserByokKey(u.byokKey || ""); } catch(_e) { setUserLicenses({}); } setShowLimitsModal(true); }; const handleSaveLimits = async () => { try { const resp = await fetch("/api/admin", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action: "update_user_licenses", targetUserId: selectedUser?.id, newLicenses: userLicenses, byokEnabled: userByokEnabled, byokKey: userByokKey }) }); if (resp.ok) { showToast("User limits applied successfully."); setShowLimitsModal(false); fetchData(); try { const bc = new BroadcastChannel('omni_channel'); bc.postMessage({ type: 'REFRESH_QUANTUM_TOKEN' }); } catch(e){} } else { const d = await resp.json(); showToast(d.error || "Error saving limits.", "error"); } } catch (_e) { showToast("Error saving limits. Periksa koneksi Anda.", "error"); } }; const handleSaveOrgByok = async () => { try { const resp = await fetch("/api/admin", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action: "update_tenant_byok", byokEnabled: orgByokEnabled, byokKey: orgByokKey }) }); if (resp.ok) { showToast("Organizational BYOK applied successfully."); fetchData(); } else { const d = await resp.json(); showToast("Error: " + d.error, "error"); } } catch (_e) { showToast("Error saving BYOK.", "error"); } }; const handleCheckout = async (packageId: string) => { setCheckoutLoading(true); try { const resp = await fetch("/api/admin/checkout", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ packageId }) }); const data = await resp.json(); if (data.url) { window.location.assign(data.url); } else { showToast("Checkout Error: " + (data.error || "Unknown error"), "error"); } } catch (_e) { showToast("Payment gateway connection failed.", "error"); } finally { setCheckoutLoading(false); } }; if (loading) return
Loading Admin Workspace...
; if (debugError) return
Error: {debugError}
; if (!tenant) return
Error: Tenant not found
; return (
{/* Quantum Toast Notification System */} {toast && (
{toast.type === 'success' ? ( ) : ( )}
{toast.type === 'success' ? 'System Success' : 'System Alert'}
{toast.message}
)} {/* HEADER ZOOM-LIKE */}

Workspace Admin {tenant.name}

TENANT COMMAND CENTER
{/* SIDEBAR */}
Account Info
{tenant.name}
LIC: {tenant.licenseNumber || 'PENDING'}
{/* Security & Network Feature Badges */} {(() => { let lic: Record = {}; try { lic = typeof tenant.licenses === 'string' ? JSON.parse(tenant.licenses || '{}') : (tenant.licenses || {}); } catch {} const feats = [ { key: 'tls_global_ca', label: "\ud83c\udf10 Let's Encrypt", cls: 'bg-emerald-50 text-emerald-700 border-emerald-200' }, { key: 'tls_sovereign', label: '\ud83d\udee1\ufe0f Private CA (X)', cls: 'bg-cyan-50 text-cyan-700 border-cyan-200' }, { key: 'ipv6_dual_stack', label: '\ud83c\udf10 IPv6 Dual-Stack', cls: 'bg-violet-50 text-violet-700 border-violet-200' }, ]; const visible = feats.filter(f => lic[f.key] && lic[f.key] !== 'HIDDEN'); if (visible.length === 0) return null; return (
{visible.map(f => { const state = lic[f.key]; if (state === 'GRANTED') return (
{f.label}
); if (state === 'UPSELL') return ( ); return null; })}
); })()}
{/* MAIN CONTENT */}
{activeTab === 'users' && (

Users ({users.length})

{users.map((u, i) => ( ))}
Email / ID Role Joined Date Action
{u.email} {u.role.toUpperCase()} {new Date(u.createdAt).toLocaleDateString('en-US')}
)} {activeTab === 'billing' && (

Billing & Subscription

Choose the right plan to unlock Quantum XCU modules for your team.

{packages.map(pkg => (
{pkg.name}
{pkg.price}
    {JSON.parse(pkg.features || '[]').slice(0, 4).map((f: string, idx: number) => (
  • {f}
  • ))}
))}
)} {activeTab === 'security' && (

Quantum Security Suite

Manage organizational cryptographic sovereignty and BYOK settings.

{/* TLS SOVEREIGN MODULE - ?? la Carte */} {(() => { let tlsState = 'HIDDEN'; try { const lic = typeof tenant.licenses === 'string' ? JSON.parse(tenant.licenses || '{}') : (tenant.licenses || {}); tlsState = lic['tls_sovereign'] || 'HIDDEN'; } catch {} if (tlsState === 'HIDDEN') return null; return (

TLS Sovereign Module

?? la Carte ??? Sovereign Communication Infrastructure

{tlsState === 'GRANTED' ? (
{tenant.securityTier === 'SOVEREIGN' ? '\ud83d\udee1\ufe0f SOVEREIGN \u2014 Private CA (X)' : tenant.securityTier === 'CLIENT_CA' ? '\ud83c\udfdb\ufe0f CLIENT CA \u2014 Custom PKI' : '\ud83c\udf10 STANDARD \u2014 Let\'s Encrypt'}
Active
Mode
{tenant.securityTier === 'SOVEREIGN' ? 'Private CA (Offline-Ready)' : tenant.securityTier === 'CLIENT_CA' ? 'Client PKI (Custom CA)' : 'Let\'s Encrypt (Global)'}
Validity
{tenant.securityTier === 'SOVEREIGN' ? '30 Years (RSA-4096)' : tenant.securityTier === 'CLIENT_CA' ? 'Per CA Policy' : 'Auto-Renew (90 Days)'}

{tenant.securityTier === 'SOVEREIGN' ? 'Organisasi Anda menggunakan Private CA dari X. Hubungi Supreme Admin untuk panduan install sertifikat di device.' : tenant.securityTier === 'CLIENT_CA' ? 'Organisasi Anda menggunakan CA sendiri (custom PKI). Sertifikat dan key di-manage oleh infrastruktur PKI internal organisasi.' : 'Koneksi menggunakan sertifikat Let\'s Encrypt yang dipercaya semua browser. Untuk beralih ke Private CA, hubungi Supreme Admin.' }

) : ( /* UPSELL STATE */

Tingkatkan ke TLS Sovereign untuk mendapatkan infrastruktur komunikasi yang sepenuhnya tertutup dengan Private CA, zero-trust security, dan kemampuan operasi offline tanpa bergantung internet global.

Private CA
RSA-4096
Offline-Ready
Zero Internet
30 Years
Certificate Life
)}
); })()}

Organizational BYOK

Aktifkan kedaulatan data total dengan menggunakan kunci enkripsi milik Anda sendiri. Kunci ini akan digunakan untuk mengenkripsi semua transmisi video, audio, dan chat dalam organisasi Anda.

{orgByokEnabled && (
setOrgByokKey(e.target.value)} className="w-full text-xs font-mono bg-white border border-blue-200 rounded-2xl px-4 py-3 outline-none focus:ring-2 focus:ring-blue-500 shadow-sm" />
)}
Quantum Health Status: Protected

Catatan: Setiap perubahan pada kebijakan keamanan akan dicatat dalam Quantum Ledger dan memerlukan waktu sinkronisasi hingga 50ms ke seluruh node global.

)}
{/* ADD USER MODAL */} {showAddUserModal && (

Add New User

setNewEmail(e.target.value)} className="w-full border border-gray-300 rounded-md px-3 py-2 focus:ring-blue-500 focus:border-blue-500" required />
setNewPassword(e.target.value)} className="w-full border border-gray-300 rounded-md px-3 py-2 focus:ring-blue-500 focus:border-blue-500" required minLength={6} />
)} {/* USER LIMITS MODAL (BYOK) */} {showLimitsModal && selectedUser && (

User Feature Limits

Manage module access for {selectedUser.email}.

{/* USER LEVEL BYOK SECTION */}

User BYOK Sovereignty

Berikan kedaulatan enkripsi individual kepada user ini. Kunci ini akan melampaui kunci organisasi.

{userByokEnabled && ( setUserByokKey(e.target.value)} className="text-[10px] font-mono bg-white border border-emerald-200 rounded-xl px-3 py-2 outline-none focus:ring-2 focus:ring-emerald-500" /> )}
{(() => { // Get tenant's granted features let tenantGranted: Record = {}; try { const raw = tenant?.licenses; if (typeof raw === 'string') { const js = JSON.parse(raw); if (Array.isArray(js)) js.forEach((k: string) => tenantGranted[k] = "GRANTED"); else tenantGranted = js; } else if (raw && typeof raw === 'object') { if (Array.isArray(raw)) raw.forEach((k: string) => tenantGranted[k] = "GRANTED"); else tenantGranted = raw; } } catch(_e) {} // Render features by category return ['JVC', 'JC', 'XCU', 'XTM', 'IAM'].map(mod => { const filtered = systemFeatures.filter(f => f.module === mod || (!f.module && mod === 'IAM')); if (filtered.length === 0) return null; return (
{mod} CAPABILITIES
{filtered.map((feat: Feature) => { const tStatus = tenantGranted[feat.key] || 'HIDDEN'; if (tStatus === 'HIDDEN') return null; // Invisible to tenant completely if (tStatus === 'UPSELL') { return (
{feat.name}
{feat.key}
setActiveTab('billing')} className="text-[10px] font-bold text-blue-600 px-3 py-1 bg-blue-50 border border-blue-200 rounded cursor-pointer hover:bg-blue-100 transition-colors uppercase tracking-wider" > Upgrade Plan
); } // If GRANTED by Superadmin const currentVal = userLicenses[feat.key] || 'GRANTED'; return (
{feat.name}
{feat.key}
); })}
); }); })()}
)}
); }