/** * Event Manager Service Interface * * Main service interface for comprehensive event management */ import { EventEmitter } from "@uplink-protocol/core"; import { CalendarEvent, CreateEventInput, UpdateEventInput, EventFilter, EventSort, EventResults, EventValidationResult } from './event.interfaces'; /** * Event manager configuration */ export interface EventManagerConfig { /** Storage configuration */ storage?: { type: 'memory' | 'localStorage' | 'indexedDB' | 'external'; options?: Record; }; /** Validation settings */ validation?: { enableValidation: boolean; strictMode: boolean; customRules?: any[]; }; /** Search configuration */ search?: { enableSearch: boolean; indexFields?: string[]; fuzzySearch?: boolean; }; /** Notification settings */ notifications?: { enableNotifications: boolean; defaultChannels?: string[]; }; /** Sync configuration */ sync?: { enableSync: boolean; providers?: any[]; }; /** Conflict detection */ conflicts?: { enableDetection: boolean; autoResolve?: boolean; }; /** Recurrence settings */ recurrence?: { enableRecurrence: boolean; maxOccurrences?: number; }; } /** * Event statistics */ export interface EventStatistics { /** Total events */ totalEvents: number; /** Events by status */ eventsByStatus: Record; /** Events by priority */ eventsByPriority: Record; /** Events by category */ eventsByCategory: Record; /** Upcoming events */ upcomingEvents: number; /** Overdue events */ overdueEvents: number; /** Events this week */ eventsThisWeek: number; /** Events this month */ eventsThisMonth: number; /** Average event duration */ averageDuration: number; /** Most busy day */ busiestDay?: Date; /** Most active attendee */ mostActiveAttendee?: string; } /** * Event manager service interface */ export interface IEventManagerService { /** * Initialize the event manager */ initialize(config?: EventManagerConfig): Promise; /** * Get all events */ getAllEvents(): Promise; /** * Get event by ID */ getEventById(id: string): Promise; /** * Query events with filters and pagination */ queryEvents(filter?: EventFilter, sort?: EventSort, page?: number, pageSize?: number): Promise; /** * Create new event */ createEvent(input: CreateEventInput): Promise; /** * Update existing event */ updateEvent(input: UpdateEventInput): Promise; /** * Delete event */ deleteEvent(id: string): Promise; /** * Bulk operations */ bulkCreateEvents(inputs: CreateEventInput[]): Promise; bulkUpdateEvents(inputs: UpdateEventInput[]): Promise; bulkDeleteEvents(ids: string[]): Promise; /** * Validate event */ validateEvent(input: CreateEventInput | UpdateEventInput): Promise; /** * Search events */ searchEvents(query: string, filters?: EventFilter): Promise; /** * Get events for date range */ getEventsForDateRange(start: Date, end: Date): Promise; /** * Get events for specific date */ getEventsForDate(date: Date): Promise; /** * Get upcoming events */ getUpcomingEvents(limit?: number): Promise; /** * Get overdue events */ getOverdueEvents(): Promise; /** * Get event statistics */ getStatistics(dateRange?: { start: Date; end: Date; }): Promise; /** * Import events */ importEvents(events: CalendarEvent[], options?: { merge?: boolean; skipDuplicates?: boolean; }): Promise<{ imported: number; skipped: number; errors: string[]; }>; /** * Export events */ exportEvents(filter?: EventFilter, format?: 'json' | 'ics' | 'csv'): Promise<{ data: string; filename: string; mimeType: string; }>; /** * Clear all events */ clearAllEvents(): Promise; /** * Get event conflicts */ getEventConflicts(eventId: string): Promise; /** * Resolve event conflict */ resolveEventConflict(conflictId: string, resolution: any): Promise; /** * Subscribe to event changes */ onEventCreated(callback: (event: CalendarEvent) => void): () => void; onEventUpdated(callback: (event: CalendarEvent, oldEvent: CalendarEvent) => void): () => void; onEventDeleted(callback: (eventId: string) => void): () => void; /** * Subscribe to validation events */ onValidationFailed(callback: (result: EventValidationResult) => void): () => void; /** * Subscribe to error events */ onError(callback: (error: Error) => void): () => void; /** * Get manager status */ getStatus(): { initialized: boolean; totalEvents: number; lastSyncTime?: Date; errors: string[]; health: 'good' | 'warning' | 'error'; }; /** * Backup all data */ backup(): Promise; /** * Restore from backup */ restore(backupData: string): Promise; /** * Initialize event emitters */ initializeEvents(): { eventCreated: EventEmitter; eventUpdated: EventEmitter<{ event: CalendarEvent; oldEvent: CalendarEvent; }>; eventDeleted: EventEmitter<{ eventId: string; event: CalendarEvent; }>; validationFailed: EventEmitter; errorOccurred: EventEmitter; bulkOperationCompleted: EventEmitter<{ operation: string; count: number; }>; }; }