import { IEventBus } from '../types/CalendarTypes'; import { CalendarConfig } from '../core/CalendarConfig'; import { EventManager } from '../managers/EventManager'; import { EventRenderingService } from '../renderers/EventRendererManager'; import { GridManager } from '../managers/GridManager'; import { ScrollManager } from '../managers/ScrollManager'; import { NavigationManager } from '../managers/NavigationManager'; import { ViewManager } from '../managers/ViewManager'; import { CalendarManager } from '../managers/CalendarManager'; import { ColumnDetector } from '../managers/ColumnDetector'; /** * Factory for creating and managing calendar managers with proper dependency injection */ export class ManagerFactory { private static instance: ManagerFactory; private constructor() {} public static getInstance(): ManagerFactory { if (!ManagerFactory.instance) { ManagerFactory.instance = new ManagerFactory(); } return ManagerFactory.instance; } /** * Create all managers with proper dependency injection */ public createManagers(eventBus: IEventBus, config: CalendarConfig): { eventManager: EventManager; eventRenderer: EventRenderingService; gridManager: GridManager; scrollManager: ScrollManager; navigationManager: NavigationManager; viewManager: ViewManager; calendarManager: CalendarManager; } { console.log('🏭 ManagerFactory: Creating managers with proper DI...'); // Create managers in dependency order const eventManager = new EventManager(eventBus); const eventRenderer = new EventRenderingService(eventBus, eventManager); const gridManager = new GridManager(); const scrollManager = new ScrollManager(); const navigationManager = new NavigationManager(eventBus, eventRenderer); const viewManager = new ViewManager(eventBus); const columnDetector = new ColumnDetector(); // CalendarManager depends on all other managers const calendarManager = new CalendarManager( eventBus, config, eventManager, gridManager, eventRenderer, scrollManager ); console.log('✅ ManagerFactory: All managers created successfully'); return { eventManager, eventRenderer, gridManager, scrollManager, navigationManager, viewManager, calendarManager }; } /** * Initialize all managers in the correct order */ public async initializeManagers(managers: { calendarManager: CalendarManager; [key: string]: any; }): Promise { console.log('🚀 ManagerFactory: Initializing managers...'); try { await managers.calendarManager.initialize(); console.log('✅ ManagerFactory: All managers initialized successfully'); } catch (error) { console.error('❌ ManagerFactory: Manager initialization failed:', error); throw error; } } }