import Logger from './logger.js'; import AppState from './state.js'; import PerformanceMonitor from './perf-monitor.js'; import LazyLoader from './lazy-loader.js'; import { APIClient, setSharedAPIInstance } from './api.js'; class Application { constructor() { try { this.logger = new Logger({ level: 'debug', maxLogs: 200, enableRemote: false }); this.appState = new AppState({ currentView: 'files', currentPage: 'files', user: null, isLoading: false, notifications: [] }); this.perfMonitor = new PerformanceMonitor(this.logger); this.api = new APIClient('/', this.logger, this.perfMonitor, this.appState); setSharedAPIInstance(this.api); this.lazyLoader = new LazyLoader({ threshold: 0.1, rootMargin: '50px', logger: this.logger }); this._setupStateSubscriptions(); this._makeGloballyAccessible(); this.initialized = true; this.logger.info('Application initialized successfully', { version: '1.0.0', timestamp: new Date().toISOString() }); } catch (error) { console.error('CRITICAL: Application initialization failed', error); this.initialized = false; throw error; } } _setupStateSubscriptions() { this.appState.subscribe((newState, prevState, action) => { this.logger.debug('State changed', { from: prevState, to: newState, action }); }); } _makeGloballyAccessible() { if (typeof window !== 'undefined') { window.app = this; } } isReady() { return this.initialized === true; } getLogger() { if (!this.initialized) { console.warn('Application not fully initialized'); } return this.logger; } getState() { if (!this.initialized) { console.warn('Application not fully initialized'); } return this.appState; } getAPI() { if (!this.initialized) { console.warn('Application not fully initialized'); } return this.api; } getPerfMonitor() { if (!this.initialized) { console.warn('Application not fully initialized'); } return this.perfMonitor; } getLazyLoader() { if (!this.initialized) { console.warn('Application not fully initialized'); } return this.lazyLoader; } } const app = new Application(); export { Application, app }; export default app;