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() ?? [],
        };
    }
}