// Main entry point for Calendar Plantempus import { eventBus } from './core/EventBus.js'; import { CalendarManager } from './managers/CalendarManager.js'; import { NavigationManager } from './managers/NavigationManager.js'; import { ViewManager } from './managers/ViewManager.js'; import { EventManager } from './managers/EventManager.js'; import { EventRenderer } from './renderers/EventRendererManager.js'; import { GridManager } from './managers/GridManager.js'; import { ScrollManager } from './managers/ScrollManager.js'; import { calendarConfig } from './core/CalendarConfig.js'; import { CalendarTypeFactory } from './factories/CalendarTypeFactory.js'; /** * Initialize the calendar application with simple direct calls */ async function initializeCalendar(): Promise { console.log('🗓️ Initializing Calendar Plantempus with simple coordination...'); // Declare managers outside try block for global access let calendarManager: CalendarManager; let navigationManager: NavigationManager; let viewManager: ViewManager; let eventManager: EventManager; let eventRenderer: EventRenderer; let gridManager: GridManager; let scrollManager: ScrollManager; try { // Use the singleton calendar configuration const config = calendarConfig; // Initialize the CalendarTypeFactory before creating managers console.log('🏭 Initializing CalendarTypeFactory...'); CalendarTypeFactory.initialize(); // Create all managers console.log('📋 Creating managers...'); calendarManager = new CalendarManager(eventBus, config); navigationManager = new NavigationManager(eventBus); // No EventRenderer dependency viewManager = new ViewManager(eventBus); eventManager = new EventManager(eventBus); eventRenderer = new EventRenderer(eventBus, eventManager); // Pass EventManager gridManager = new GridManager(); scrollManager = new ScrollManager(); // Set manager references in CalendarManager calendarManager.setManagers(eventManager, gridManager, eventRenderer, scrollManager); // Enable debug mode for development eventBus.setDebug(true); // Initialize using simple direct calls console.log('🚀 Starting simple initialization...'); await calendarManager.initialize(); console.log('🎊 Calendar Plantempus initialized successfully!'); console.log('📊 Initialization Report:', calendarManager.getInitializationReport()); } catch (error) { console.error('💥 Calendar initialization failed:', error); // Could implement fallback or retry logic here throw error; } // Expose to window for debugging (window as any).calendarDebug = { eventBus, calendarManager, navigationManager, viewManager, eventManager, eventRenderer, gridManager, scrollManager }; } // Initialize when DOM is ready - now handles async properly if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { initializeCalendar().catch(error => { console.error('Failed to initialize calendar:', error); }); }); } else { initializeCalendar().catch(error => { console.error('Failed to initialize calendar:', error); }); }