import { SystemSettings, ISystemSettings } from '@/models/system-settings' import { connectDB } from '@/lib/mongodb' // Cache for system settings to avoid database calls on every request let settingsCache: any = null let cacheTimestamp = 0 const CACHE_DURATION = 60000 // 1 minute cache async function getSettingsFromDB() { await connectDB() let settings = await (SystemSettings as any).findOne({}) if (!settings) { // Create default settings if none exist settings = new SystemSettings({ maintenanceMode: false, registrationEnabled: true, emailVerificationRequired: true, maxUserBalance: 1000000, defaultUserRole: 'user', systemMessage: '', paymentGatewayEnabled: true, developerHireEnabled: true, vpsDeploymentEnabled: true, kubernetesDeploymentEnabled: true, vpnServiceEnabled: true, lastUpdated: new Date(), updatedBy: 'System', }) await settings.save() } return settings } export async function getSystemSettings() { const now = Date.now() // Return cached settings if still valid if (settingsCache && now - cacheTimestamp < CACHE_DURATION) { return settingsCache } // Fetch fresh settings from database const settings = await getSettingsFromDB() settingsCache = settings.toObject() cacheTimestamp = now return settingsCache } export async function updateSystemSettings(newSettings: any) { await connectDB() const settings = await (SystemSettings as any).findOneAndUpdate( {}, { ...newSettings, lastUpdated: new Date() }, { new: true, upsert: true } ) // Clear cache to force refresh settingsCache = null cacheTimestamp = 0 return settings } export async function checkServiceAvailability( service: 'vps' | 'developer' | 'kubernetes' | 'vpn' ): Promise { const serviceMap = { vps: 'vpsDeploymentEnabled', developer: 'developerHireEnabled', kubernetes: 'kubernetesDeploymentEnabled', vpn: 'vpnServiceEnabled', } const settings = await getSystemSettings() const settingKey = serviceMap[service] return settings[settingKey] as boolean }