using Nager.Holiday; using NodaTime; namespace DysonNetwork.Pass.Account; /// /// Reference from Nager.Holiday /// public enum NotableHolidayType { /// Public holiday Public, /// Bank holiday, banks and offices are closed Bank, /// School holiday, schools are closed School, /// Authorities are closed Authorities, /// Majority of people take a day off Optional, /// Optional festivity, no paid day off Observance, } public class NotableDay { public Instant Date { get; set; } public string? LocalName { get; set; } public string? GlobalName { get; set; } public string? CountryCode { get; set; } public NotableHolidayType[] Holidays { get; set; } = []; public static NotableDay FromNagerHoliday(PublicHoliday holiday) { return new NotableDay() { Date = Instant.FromDateTimeUtc(holiday.Date.ToUniversalTime()), LocalName = holiday.LocalName, GlobalName = holiday.Name, CountryCode = holiday.CountryCode, Holidays = holiday.Types?.Select(x => x switch { PublicHolidayType.Public => NotableHolidayType.Public, PublicHolidayType.Bank => NotableHolidayType.Bank, PublicHolidayType.School => NotableHolidayType.School, PublicHolidayType.Authorities => NotableHolidayType.Authorities, PublicHolidayType.Optional => NotableHolidayType.Optional, _ => NotableHolidayType.Observance }).ToArray() ?? [], }; } }