import type { AppConfig } from '@app/contexts/AppConfigContext'; interface LicenseInfo { licenseType: string; enabled: boolean; maxUsers: number; hasKey: boolean; } interface WauResponse { trackingSince: string; daysOnline: number; totalUniqueBrowsers: number; weeklyActiveUsers: number; } interface AdminUsageResponse { totalUsers?: number; } interface SimulationScenario { label: string; appConfig: AppConfig; wau?: WauResponse; adminUsage?: AdminUsageResponse; licenseInfo: LicenseInfo; } const DEV_TESTING_MODE = false; const SIMULATION_INDEX = 0; const FREE_LICENSE_INFO: LicenseInfo = { licenseType: 'NORMAL', enabled: false, maxUsers: 5, hasKey: false, }; const BASE_NO_LOGIN_CONFIG: AppConfig = { enableAnalytics: true, appVersion: '2.4.5', serverCertificateEnabled: false, enableAlphaFunctionality: false, serverPort: 8080, premiumEnabled: false, runningProOrHigher: false, runningEE: false, enableLogin: false, activeSecurity: false, languages: [], contextPath: '/', license: 'NORMAL', baseUrl: 'http://localhost', enableEmailInvites: true, }; const BASE_LOGIN_CONFIG: AppConfig = { ...BASE_NO_LOGIN_CONFIG, enableLogin: true, activeSecurity: true, }; const SIMULATION_SCENARIOS: SimulationScenario[] = [ { label: 'no-login-user-under-limit (no-license)', appConfig: { ...BASE_NO_LOGIN_CONFIG, }, wau: { trackingSince: '2025-11-18T23:20:12.520884200Z', daysOnline: 0, totalUniqueBrowsers: 3, weeklyActiveUsers: 3, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'no-login-admin-under-limit (no-license)', appConfig: { ...BASE_NO_LOGIN_CONFIG, }, wau: { trackingSince: '2025-10-01T00:00:00Z', daysOnline: 14, totalUniqueBrowsers: 4, weeklyActiveUsers: 4, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'no-login-user-over-limit (no-license)', appConfig: { ...BASE_NO_LOGIN_CONFIG, }, wau: { trackingSince: '2025-09-01T00:00:00Z', daysOnline: 30, totalUniqueBrowsers: 12, weeklyActiveUsers: 9, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'no-login-admin-over-limit (no-license)', appConfig: { ...BASE_NO_LOGIN_CONFIG, }, wau: { trackingSince: '2025-08-15T00:00:00Z', daysOnline: 45, totalUniqueBrowsers: 18, weeklyActiveUsers: 12, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'login-user-under-limit (no-license)', appConfig: { ...BASE_LOGIN_CONFIG, isAdmin: false, }, adminUsage: { totalUsers: 3, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'login-admin-under-limit (no-license)', appConfig: { ...BASE_LOGIN_CONFIG, isAdmin: true, }, adminUsage: { totalUsers: 4, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'login-user-over-limit (no-license)', appConfig: { ...BASE_LOGIN_CONFIG, isAdmin: false, }, adminUsage: { totalUsers: 12, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, { label: 'login-admin-over-limit (no-license)', appConfig: { ...BASE_LOGIN_CONFIG, isAdmin: true, }, adminUsage: { totalUsers: 57, }, licenseInfo: { ...FREE_LICENSE_INFO }, }, ]; function getActiveScenario(): SimulationScenario | null { if (!DEV_TESTING_MODE) { return null; } const scenario = SIMULATION_SCENARIOS[SIMULATION_INDEX]; if (!scenario) { console.warn('[Simulation] SIMULATION_INDEX out of range, using live backend.'); return null; } console.warn(`[Simulation] Using scenario #${SIMULATION_INDEX} (${scenario.label}).`); return scenario; } export function getSimulatedAppConfig(): AppConfig | null { return getActiveScenario()?.appConfig ?? null; } export function getSimulatedWauResponse(): WauResponse | null { return getActiveScenario()?.wau ?? null; } export function getSimulatedAdminUsage(): AdminUsageResponse | null { return getActiveScenario()?.adminUsage ?? null; } export function getSimulatedLicenseInfo(): LicenseInfo | null { return getActiveScenario()?.licenseInfo ?? null; } export const DEV_TESTING_ENABLED = DEV_TESTING_MODE;