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;
}
}