import { ENVIRONMENTS } from '../constants'; export interface TestEnvironment { name: string; baseURL: string; mockEnabled: boolean; mockMode: 'full' | 'partial' | 'none'; timeout: { default: number; navigation: number; element: number; network: number; }; } class TestConfig { private static instance: TestConfig; private currentEnvironment: string; private environments: Record; private constructor() { this.currentEnvironment = process.env.E2E_ENV || 'local'; this.environments = { local: { ...ENVIRONMENTS.LOCAL, timeout: { default: 30000, navigation: 30000, element: 10000, network: 30000 } }, dev: { ...ENVIRONMENTS.DEV, timeout: { default: 30000, navigation: 30000, element: 10000, network: 30000 } }, test: { ...ENVIRONMENTS.TEST, timeout: { default: 30000, navigation: 30000, element: 10000, network: 30000 } }, prod: { ...ENVIRONMENTS.PROD, timeout: { default: 30000, navigation: 30000, element: 10000, network: 30000 } } }; } static getInstance(): TestConfig { if (!TestConfig.instance) { TestConfig.instance = new TestConfig(); } return TestConfig.instance; } getEnvironment(): TestEnvironment { return this.environments[this.currentEnvironment]; } getBaseURL(): string { return this.environments[this.currentEnvironment].baseURL; } isMockEnabled(): boolean { return this.environments[this.currentEnvironment].mockEnabled; } getMockMode(): string { return this.environments[this.currentEnvironment].mockMode; } getCurrentEnvironmentName(): string { return this.currentEnvironment; } setEnvironment(envName: string): void { if (this.environments[envName]) { this.currentEnvironment = envName; } else { throw new Error(`Unknown environment: ${envName}`); } } getTimeout(): TestEnvironment['timeout'] { return this.environments[this.currentEnvironment].timeout; } } export const testConfig = TestConfig.getInstance();