'use client'
import PageLayout from '../components/PageLayout'
import Waves from '../components/background/waves'
import BlueBlurryBackground from '../components/background/blueblurry' // NEW
import {
UsersIcon,
ExclamationTriangleIcon,
CpuChipIcon,
ServerStackIcon,
ArrowRightIcon,
Squares2X2Icon,
BanknotesIcon,
ClipboardDocumentListIcon,
CommandLineIcon,
LanguageIcon
} from '@heroicons/react/24/outline'
import { useMemo, useState, useEffect } from 'react'
import { useRouter } from 'next/navigation'
import { useAdminUsers } from '../hooks/useAdminUsers'
import useAuthStore from '../store/authStore'
import { useTranslation } from '../i18n/useTranslation'
// env-based feature flags
const DISPLAY_MATRIX = process.env.NEXT_PUBLIC_DISPLAY_MATRIX !== 'false'
const DISPLAY_ABONEMENTS = process.env.NEXT_PUBLIC_DISPLAY_ABONEMMENTS !== 'false'
const DISPLAY_NEWS = process.env.NEXT_PUBLIC_DISPLAY_NEWS !== 'false'
const DISPLAY_DEV_MANAGEMENT = process.env.NEXT_PUBLIC_DISPLAY_DEV_MANAGEMENT !== 'false'
export default function AdminDashboardPage() {
const router = useRouter()
const { t } = useTranslation()
const { userStats, isAdmin } = useAdminUsers()
const user = useAuthStore(s => s.user)
const isAdminOrSuper =
!!user &&
(
(user as any)?.role === 'admin' ||
(user as any)?.userType === 'admin' ||
(user as any)?.isAdmin === true ||
((user as any)?.roles?.includes?.('admin')) ||
(user as any)?.role === 'super_admin' ||
(user as any)?.userType === 'super_admin' ||
(user as any)?.isSuperAdmin === true ||
((user as any)?.roles?.includes?.('super_admin'))
)
const [isClient, setIsClient] = useState(false)
const [isMobile, setIsMobile] = useState(false)
// Handle client-side mounting
useEffect(() => {
setIsClient(true)
}, [])
useEffect(() => {
const mq = window.matchMedia('(max-width: 768px)')
const apply = () => setIsMobile(mq.matches)
apply()
mq.addEventListener?.('change', apply)
window.addEventListener('resize', apply, { passive: true })
return () => {
mq.removeEventListener?.('change', apply)
window.removeEventListener('resize', apply)
}
}, [])
// Fallback for loading/no data
const displayStats = userStats || {
totalUsers: 0,
adminUsers: 0,
verificationPending: 0,
activeUsers: 0,
personalUsers: 0,
companyUsers: 0
}
const permissionStats = useMemo(() => ({
permissions: 1 // TODO: fetch permission definitions
}), [])
const serverStats = useMemo(() => ({
status: 'Online',
uptime: '4 days, 8 hours',
cpu: '0%',
memory: '0.1 / 7.8',
recentErrors: [] as { id: string; ts: string; msg: string }[]
}), [])
// Show loading during SSR/initial client render
if (!isClient) {
return (
{t('adminDashboard.loading')}
)
}
// Access check (only after client-side hydration)
if (!isAdmin) {
return (
{t('adminDashboard.accessDenied')}
{t('adminDashboard.accessDeniedMessage')}
)
}
const content = (
{/* Header */}
{/* Warning banner */}
{t('adminDashboard.warningTitle')}
{t('adminDashboard.warningMessage')}
{/* Stats Card */}
{t('adminDashboard.totalUsers')}
{displayStats.totalUsers}
{t('adminDashboard.admins')}
{displayStats.adminUsers}
{t('adminDashboard.active')}
{displayStats.activeUsers}
{t('adminDashboard.pendingVerification')}
{displayStats.verificationPending}
{t('adminDashboard.personal')}
{displayStats.personalUsers}
{t('adminDashboard.company')}
{displayStats.companyUsers}
{/* Management Shortcuts Card */}
{t('adminDashboard.managementShortcuts')}
{t('adminDashboard.managementShortcutsSubtitle')}
{/* Matrix Management */}
{/* Coffee Subscription Management */}
{/* Contract Management (unchanged) */}
{/* Dashboard Management */}
{/* User Management (unchanged) */}
{/* User Verify */}
{/* Finance Management */}
{/* Pool Management */}
{/* Affiliate Management */}
{/* News Management */}
{/* Dev Management */}
{/* Language Management */}
{/* Server Status & Logs */}
{t('adminDashboard.serverStatusLogs')}
{t('adminDashboard.serverStatusLogsSubtitle')}
{/* Metrics */}
{t('adminDashboard.serverStatusLabel')}{' '}
{serverStats.status === 'Online' ? t('adminDashboard.serverOnline') : t('adminDashboard.serverOffline')}
{t('adminDashboard.uptime')} {serverStats.uptime}
{t('adminDashboard.cpuUsage')} {serverStats.cpu}
{t('adminDashboard.memoryUsage')} {serverStats.memory} GB
{t('adminDashboard.autoscaledEnvironment')}
{/* Divider */}
{/* Logs */}
{t('adminDashboard.recentErrorLogs')}
{serverStats.recentErrors.length === 0 && (
{t('adminDashboard.noRecentLogs')}
)}
{/* Placeholder for future logs list */}
{/* TODO: Replace with mapped log entries */}
)
return (
{isMobile ? (
{content}
) : (
{content}
)}
)
}