using ErsatzTV.Application.Configuration; using ApiXmltvBlockBehavior = ErsatzTV.Core.Api.Settings.XmltvBlockBehavior; using ApiXmltvTimeZone = ErsatzTV.Core.Api.Settings.XmltvTimeZone; namespace ErsatzTV.Controllers.Api.Requests; public record UpdateXmltvSettingsRequest(int DaysToBuild, ApiXmltvTimeZone TimeZone, ApiXmltvBlockBehavior BlockBehavior) { public UpdateXmltvSettings ToCommand() => new( new XmltvSettingsViewModel { DaysToBuild = DaysToBuild, TimeZone = ToVmTimeZone(TimeZone), BlockBehavior = ToVmBlockBehavior(BlockBehavior) }); private static XmltvTimeZone ToVmTimeZone(ApiXmltvTimeZone timeZone) => timeZone switch { ApiXmltvTimeZone.Local => XmltvTimeZone.Local, ApiXmltvTimeZone.Utc => XmltvTimeZone.Utc, _ => throw new ArgumentOutOfRangeException(nameof(timeZone), timeZone, null) }; private static XmltvBlockBehavior ToVmBlockBehavior(ApiXmltvBlockBehavior blockBehavior) => blockBehavior switch { ApiXmltvBlockBehavior.SplitTimeEvenly => XmltvBlockBehavior.SplitTimeEvenly, ApiXmltvBlockBehavior.UseActualTimes => XmltvBlockBehavior.UseActualTimes, _ => throw new ArgumentOutOfRangeException(nameof(blockBehavior), blockBehavior, null) }; }