using Core.Entities; using Core.Models; namespace GoogleSheetsScheduleImport; /// /// For grouped output, occurrence lines should look like the PDF schedule: activity text only, not /// MS EventName Activity when the section is already EventName - MS. /// public static class OccurrenceDisplayNameReducer { public static string ReduceForSection(string occurrenceName, EventDefinition matched, SchoolLevel level) { var (remainder, lvl) = SchoolLevelPrefixParser.StripLeadingSchoolPrefix(occurrenceName); if (!lvl.HasValue || lvl.Value != level) return TextNormalization.ForEmitLine(occurrenceName); var r = remainder.Trim(); var eventName = matched.Name.Trim(); if (r.StartsWith(eventName, StringComparison.OrdinalIgnoreCase)) { r = r[eventName.Length..].TrimStart(); r = TrimLeadingJoiners(r); } r = TextNormalization.ForEmitLine(r); if (string.IsNullOrWhiteSpace(r)) return TextNormalization.ForEmitLine(remainder.Trim()); return r; } private static string TrimLeadingJoiners(string s) { var r = s; while (r.Length > 0) { var c = r[0]; if (c is '/' or '-' or ':' or '&' or '–' or '—' or ',' or '.') { r = r[1..].TrimStart(); continue; } break; } return r; } }