using ErsatzTV.Application.Scheduling; using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain.Scheduling; namespace ErsatzTV.Controllers.Api.Requests; public record DecoBreakContentRequest( int Id, CollectionType CollectionType, int? CollectionId, int? MediaItemId, int? MultiCollectionId, int? SmartCollectionId, int? PlaylistId, DecoBreakPlacement Placement) { public UpdateDecoBreakContent ToUpdateItem() => new(Id, CollectionType, CollectionId, MediaItemId, MultiCollectionId, SmartCollectionId, PlaylistId, Placement); } public record ReplaceDecoRequest( string Name, DecoMode WatermarkMode, List WatermarkIds, bool UseWatermarkDuringFiller, DecoMode GraphicsElementsMode, List GraphicsElementIds, bool UseGraphicsElementsDuringFiller, DecoMode BreakContentMode, List BreakContent, DecoMode DefaultFillerMode, CollectionType DefaultFillerCollectionType, int? DefaultFillerCollectionId, int? DefaultFillerMediaItemId, int? DefaultFillerMultiCollectionId, int? DefaultFillerSmartCollectionId, bool DefaultFillerTrimToFit, DecoMode DeadAirFallbackMode, CollectionType DeadAirFallbackCollectionType, int? DeadAirFallbackCollectionId, int? DeadAirFallbackMediaItemId, int? DeadAirFallbackMultiCollectionId, int? DeadAirFallbackSmartCollectionId) { public Either ToCommand(int decoGroupId, int decoId) { // Merge is only valid for the watermark and graphics-element sections; the handler treats // Merge on the other sections as "not overridden" (silently ignored), so reject it here. if (BreakContentMode is DecoMode.Merge) { return BaseError.New("[BreakContentMode] does not support Merge; use Inherit, Disable, or Override"); } if (DefaultFillerMode is DecoMode.Merge) { return BaseError.New("[DefaultFillerMode] does not support Merge; use Inherit, Disable, or Override"); } if (DeadAirFallbackMode is DecoMode.Merge) { return BaseError.New("[DeadAirFallbackMode] does not support Merge; use Inherit, Disable, or Override"); } return new UpdateDeco( decoId, decoGroupId, Name, WatermarkMode, WatermarkIds ?? [], UseWatermarkDuringFiller, GraphicsElementsMode, GraphicsElementIds ?? [], UseGraphicsElementsDuringFiller, BreakContentMode, (BreakContent ?? []).Select(bc => bc.ToUpdateItem()).ToList(), DefaultFillerMode, DefaultFillerCollectionType, DefaultFillerCollectionId, DefaultFillerMediaItemId, DefaultFillerMultiCollectionId, DefaultFillerSmartCollectionId, DefaultFillerTrimToFit, DeadAirFallbackMode, DeadAirFallbackCollectionType, DeadAirFallbackCollectionId, DeadAirFallbackMediaItemId, DeadAirFallbackMultiCollectionId, DeadAirFallbackSmartCollectionId); } }