import { useState, useEffect, useCallback } from 'react' import { SystemInfo } from '../config' const defaultSystemInfo: SystemInfo = { wordpress: { version: '', multisite: false, memoryLimit: '', debugMode: false, cron: true, language: '', timezone: '', permalinkStructure: '', }, php: { version: '', memoryLimit: '', maxExecutionTime: '', maxInputVars: '', postMaxSize: '', uploadMaxFilesize: '', safeMode: false, openBasedir: false, extensions: [], disabledFunctions: [], }, mysql: { version: '', maxConnections: '', maxPacketSize: '', storageEngine: '', }, server: { software: '', serverProtocol: '', documentRoot: '', serverAddress: '', }, woocommerce: { version: '', databaseVersion: '', currency: '', currencyPosition: '', thousandSeparator: '', decimalSeparator: '', productsCount: 0, ordersCount: 0, }, swiftCommerce: { version: '', proVersion: '', featuresEnabled: [], }, registrationForms: { wordpress: { usersCanRegister: false, emailVerificationEnabled: false, registrationFormEnabled: false, activeOwner: 'None', registerFormHookCallbacks: 0, registrationErrorsHookCallbacks: 0, }, woocommerce: { available: false, myAccountRegistrationEnabled: false, generateUsername: '', generatePassword: '', myAccountPageId: 0, myAccountPageUsesShortcode: false, myAccountPageUsesBlock: false, themeTemplateOverride: '', emailVerificationEnabled: false, registrationFormEnabled: false, activeOwner: 'None', woocommerceRegisterFormHookCallbacks: 0, woocommerceRegistrationErrorsHookCallbacks: 0, }, conflict: { registrationFormMode: 'registration_form', wordpressConflict: false, woocommerceConflict: false, }, warnings: [], }, } export function useSystemInfo() { const [systemInfo, setSystemInfo] = useState(defaultSystemInfo) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [copying, setCopying] = useState(false) const fetchSystemInfo = useCallback(async () => { try { setLoading(true) setError(null) const apiUrl = window.swiftCommerceData?.apiUrl || '/wp-json/swift-commerce/v1' const response = await fetch(`${apiUrl}/system-info`, { headers: { 'X-WP-Nonce': window.swiftCommerceData?.restNonce || '', }, }) if (!response.ok) { throw new Error('Failed to fetch system info') } const data = await response.json() setSystemInfo(data) } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error') console.error('Failed to fetch system info:', err) } finally { setLoading(false) } }, []) useEffect(() => { fetchSystemInfo() }, [fetchSystemInfo]) const copyToClipboard = useCallback(async () => { setCopying(true) try { const text = generateSystemReport(systemInfo) await navigator.clipboard.writeText(text) return { success: true } } catch (err) { console.error('Failed to copy:', err) return { success: false } } finally { setTimeout(() => setCopying(false), 2000) } }, [systemInfo]) const downloadReport = useCallback(() => { const text = generateSystemReport(systemInfo) const blob = new Blob([text], { type: 'text/plain' }) const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = `Swift Commerce-system-report-${new Date().toISOString().split('T')[0]}.txt` document.body.appendChild(a) a.click() document.body.removeChild(a) URL.revokeObjectURL(url) }, [systemInfo]) return { systemInfo, loading, error, copying, refresh: fetchSystemInfo, copyToClipboard, downloadReport, } } function generateSystemReport(info: SystemInfo): string { const sections = [ '### Swift Commerce System Report ###', `Generated: ${new Date().toISOString()}`, '', '--- WordPress Environment ---', `WordPress Version: ${info.wordpress.version}`, `Multisite: ${info.wordpress.multisite ? 'Yes' : 'No'}`, `Memory Limit: ${info.wordpress.memoryLimit}`, `Debug Mode: ${info.wordpress.debugMode ? 'Enabled' : 'Disabled'}`, `WP Cron: ${info.wordpress.cron ? 'Enabled' : 'Disabled'}`, `Language: ${info.wordpress.language}`, `Timezone: ${info.wordpress.timezone}`, `Permalink Structure: ${info.wordpress.permalinkStructure}`, '', '--- Server Environment ---', `Server Software: ${info.server.software}`, `PHP Version: ${info.php.version}`, `PHP Memory Limit: ${info.php.memoryLimit}`, `PHP Max Execution Time: ${info.php.maxExecutionTime}`, `PHP Max Input Vars: ${info.php.maxInputVars}`, `PHP Post Max Size: ${info.php.postMaxSize}`, `PHP Upload Max Filesize: ${info.php.uploadMaxFilesize}`, `MySQL Version: ${info.mysql.version}`, `Max Connections: ${info.mysql.maxConnections}`, `Max Packet Size: ${info.mysql.maxPacketSize}`, '', '--- PHP Extensions ---', `Installed: ${info.php.extensions.join(', ')}`, '', '--- WooCommerce ---', `Version: ${info.woocommerce.version}`, `Database Version: ${info.woocommerce.databaseVersion}`, `Currency: ${info.woocommerce.currency}`, `Products Count: ${info.woocommerce.productsCount}`, `Orders Count: ${info.woocommerce.ordersCount}`, '', '--- Swift Commerce ---', `Free Plugin Version: ${info.swiftCommerce.version}`, ...(info.swiftCommerce.proVersion ? [`Pro Plugin Version: ${info.swiftCommerce.proVersion}`] : []), `Features Enabled: ${info.swiftCommerce.featuresEnabled.join(', ') || 'None'}`, '', '--- Registration Forms Diagnostics ---', `WP Users Can Register: ${info.registrationForms.wordpress.usersCanRegister ? 'Yes' : 'No'}`, `WP Email Verification Enabled: ${info.registrationForms.wordpress.emailVerificationEnabled ? 'Yes' : 'No'}`, `WP Registration Form Enabled: ${info.registrationForms.wordpress.registrationFormEnabled ? 'Yes' : 'No'}`, `WP Active Owner: ${info.registrationForms.wordpress.activeOwner}`, `WP register_form callbacks: ${info.registrationForms.wordpress.registerFormHookCallbacks}`, `WooCommerce My Account Registration Enabled: ${info.registrationForms.woocommerce.myAccountRegistrationEnabled ? 'Yes' : 'No'}`, `WooCommerce Email Verification Enabled: ${info.registrationForms.woocommerce.emailVerificationEnabled ? 'Yes' : 'No'}`, `WooCommerce Registration Form Enabled: ${info.registrationForms.woocommerce.registrationFormEnabled ? 'Yes' : 'No'}`, `WooCommerce Active Owner: ${info.registrationForms.woocommerce.activeOwner}`, `WooCommerce register_form callbacks: ${info.registrationForms.woocommerce.woocommerceRegisterFormHookCallbacks}`, `My Account Page ID: ${info.registrationForms.woocommerce.myAccountPageId}`, `My Account Uses Shortcode: ${info.registrationForms.woocommerce.myAccountPageUsesShortcode ? 'Yes' : 'No'}`, `My Account Uses Block: ${info.registrationForms.woocommerce.myAccountPageUsesBlock ? 'Yes' : 'No'}`, `Theme My Account Template Override: ${info.registrationForms.woocommerce.themeTemplateOverride || 'None'}`, `Form Owner Mode: ${info.registrationForms.conflict.registrationFormMode}`, `Registration Diagnostics Warnings: ${info.registrationForms.warnings.join(' | ') || 'None'}`, '', '### End of Report ###', ] return sections.join('\n') }