using Mirea.Api.Endpoint.Configuration.Validation.Attributes; using Mirea.Api.Endpoint.Configuration.Validation.Interfaces; using System; using System.Collections.Generic; using System.Linq; namespace Mirea.Api.Endpoint.Configuration.Model.GeneralSettings; [RequiredSettings] public class ScheduleSettings : IIsConfigured { public struct PairPeriodTime { public TimeOnly Start { get; set; } public TimeOnly End { get; set; } public PairPeriodTime(TimeOnly t1, TimeOnly t2) { if (t1 > t2) { Start = t2; End = t1; } else { Start = t1; End = t2; } } public PairPeriodTime(Dto.Common.PairPeriodTime time) : this(time.Start, time.End) { } } public record struct CronUpdateSkip { public DateOnly? Start { get; set; } public DateOnly? End { get; set; } public DateOnly? Date { get; set; } public CronUpdateSkip(DateOnly d1, DateOnly d2) { if (d1 > d2) { Start = d2; End = d1; } else { Start = d1; End = d2; } } public CronUpdateSkip(DateOnly d1) => Date = d1; } public required string CronUpdateSchedule { get; set; } public DateOnly StartTerm { get; set; } public required IDictionary PairPeriod { get; set; } public List CronUpdateSkipDateList { get; set; } = []; public bool IsConfigured() { return !string.IsNullOrEmpty(CronUpdateSchedule) && StartTerm != default && PairPeriod.Count != 0 && PairPeriod.Any(); } }