using Core.Entities; namespace Core.Parsers.EventOccurrence; /// /// Resolves event definitions from occurrence name patterns or section context. /// public static class EventDefinitionResolver { /// /// Maps special event name patterns to their EventDefinition instances. /// Patterns are checked in order, and the first match wins. /// private static readonly Dictionary SpecialEventPatterns = new(StringComparer.OrdinalIgnoreCase) { ["Meet the Candidates"] = EventDefinition.MeetTheCandidates, ["Chapter Officer Meeting"] = EventDefinition.ChapterOfficerMeeting, ["Voting Delegate Meeting"] = EventDefinition.VotingDelegateMeeting, }; /// /// Determines the EventDefinition for an occurrence based on its name pattern or current section context. /// /// The name of the occurrence. /// The current event definition from section header, if any. /// The resolved EventDefinition, or null if it cannot be determined. public static EventDefinition? Resolve(string occurrenceName, EventDefinition? currentEventDefinition) { // Check for special event name patterns first (regardless of current section) foreach (var (pattern, eventDef) in SpecialEventPatterns) { if (occurrenceName.Contains(pattern, StringComparison.OrdinalIgnoreCase)) return eventDef; } // If we're in a General Schedule/Session section and no pattern matched, use GeneralSchedule if (currentEventDefinition == EventDefinition.GeneralSchedule) return EventDefinition.GeneralSchedule; // If we have a current event definition from section header (e.g., regular events), use it return currentEventDefinition; } }