import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import {
Loader2,
Server,
Database,
Code2,
Globe,
ShoppingCart,
Zap,
UserPlus,
CheckCircle2,
AlertTriangle,
XCircle,
RefreshCw,
Copy,
Download,
Check,
} from "lucide-react"
import { useSystemInfo } from "../hooks/use-system-info"
import {
minimumRequirements,
requiredExtensions,
recommendedExtensions,
compareVersions,
compareMemory,
SystemRequirement
} from "../config"
function StatusIcon({ status }: { status: 'pass' | 'warning' | 'fail' }) {
switch (status) {
case 'pass':
return
case 'warning':
return
case 'fail':
return
}
}
function StatusBadge({ status }: { status: 'pass' | 'warning' | 'fail' }) {
const variants = {
pass: 'bg-green-100 text-green-800 border-green-200',
warning: 'bg-yellow-100 text-yellow-800 border-yellow-200',
fail: 'bg-red-100 text-red-800 border-red-200',
}
const labels = {
pass: 'OK',
warning: 'Warning',
fail: 'Failed',
}
return (
{labels[status]}
)
}
function RequirementRow({ req }: { req: SystemRequirement }) {
return (
{req.name}
{req.description && (
{req.description}
)}
Required:
{req.required}
Current:
{req.current}
)
}
function InfoRow({ label, value, mono = false }: { label: string; value: string | number | boolean; mono?: boolean }) {
const displayValue = typeof value === 'boolean' ? (value ? 'Yes' : 'No') : String(value)
return (
{label}
{displayValue || 'N/A'}
)
}
export function SystemInfoPage() {
const {
systemInfo,
loading,
error,
copying,
refresh,
copyToClipboard,
downloadReport
} = useSystemInfo()
if (loading) {
return (
Loading system information...
)
}
if (error) {
return (
Failed to load system info
{error}
Retry
)
}
// Build requirements list
const requirements: SystemRequirement[] = [
{
name: 'PHP Version',
required: minimumRequirements.php.version + '+',
current: systemInfo.php.version,
status: compareVersions(systemInfo.php.version, minimumRequirements.php.version),
},
{
name: 'PHP Memory Limit',
required: minimumRequirements.php.memoryLimit,
current: systemInfo.php.memoryLimit,
status: compareMemory(systemInfo.php.memoryLimit, minimumRequirements.php.memoryLimit),
},
{
name: 'WordPress Version',
required: minimumRequirements.wordpress.version + '+',
current: systemInfo.wordpress.version,
status: compareVersions(systemInfo.wordpress.version, minimumRequirements.wordpress.version),
},
{
name: 'WordPress Memory Limit',
required: minimumRequirements.wordpress.memoryLimit,
current: systemInfo.wordpress.memoryLimit,
status: compareMemory(systemInfo.wordpress.memoryLimit, minimumRequirements.wordpress.memoryLimit),
},
{
name: 'MySQL Version',
required: minimumRequirements.mysql.version + '+',
current: systemInfo.mysql.version,
status: compareVersions(systemInfo.mysql.version, minimumRequirements.mysql.version),
},
{
name: 'WooCommerce Version',
required: minimumRequirements.woocommerce.version + '+',
current: systemInfo.woocommerce.version || 'Not Installed',
status: systemInfo.woocommerce.version
? compareVersions(systemInfo.woocommerce.version, minimumRequirements.woocommerce.version)
: 'fail',
},
]
const passCount = requirements.filter(r => r.status === 'pass').length
const warningCount = requirements.filter(r => r.status === 'warning').length
const failCount = requirements.filter(r => r.status === 'fail').length
// Check PHP extensions
const extensionStatus = requiredExtensions.map(ext => ({
name: ext,
installed: systemInfo.php.extensions.includes(ext),
required: true,
}))
const recommendedStatus = recommendedExtensions.map(ext => ({
name: ext,
installed: systemInfo.php.extensions.includes(ext),
required: false,
}))
return (
{/* Header */}
System Info
Server configuration and requirements status
Refresh
{copying ? (
<>
Copied!
>
) : (
<>
Copy
>
)}
Download
{/* Summary Cards */}
{passCount}
Requirements Passed
0 ? 'border-yellow-200 bg-yellow-50' : ''}>
0 ? 'border-red-200 bg-red-50' : ''}>
{failCount}
Requirements Failed
{/* Requirements & Extensions - Two Column Layout */}
{/* Requirements Check */}
System Requirements
Minimum requirements for Swift Commerce to run properly
{requirements.map((req, index) => (
))}
{/* PHP Extensions */}
PHP Extensions
Required and recommended PHP extensions
Required Extensions
{extensionStatus.map((ext) => (
{ext.installed ? : }
{ext.name}
))}
Recommended Extensions
{recommendedStatus.map((ext) => (
{ext.installed ? : }
{ext.name}
))}
{/* Registration Forms Diagnostics */}
0 ? 'border-yellow-200 bg-yellow-50/40' : ''}>
Registration Forms
Checks that affect WordPress and WooCommerce registration field rendering
{systemInfo.registrationForms.warnings.length > 0 && (
{systemInfo.registrationForms.warnings.map((warning) => (
{warning}
))}
)}
{/* WordPress Info */}
WordPress Environment
{/* PHP Info */}
PHP Configuration
{/* MySQL Info */}
Database
{/* Server Info */}
Server
{/* WooCommerce Info */}
WooCommerce
{/* Swift Commerce Info */}
Swift Commerce
{systemInfo.swiftCommerce.proVersion && (
)}
Enabled Features
{systemInfo.swiftCommerce.featuresEnabled.length > 0 ? (
systemInfo.swiftCommerce.featuresEnabled.map((feature) => (
{feature}
))
) : (
No features enabled yet
)}
)
}