using Modules.Library.Domain.EntitiesV0.MediaContent.Items.Anime.ShadowEntities; namespace Modules.Library.Domain.EntitiesV0.MediaContent.Items.Anime; public class AnimeEpisode : AnimeItemSingle { private readonly AnimeTitle _title; private readonly AnimeSeason? _season; private readonly AnimeEpisodeShadow _shadow; public AnimeEpisodeType Type => _shadow.type; public int? Number => _shadow.number; internal AnimeEpisode(AnimeTitle title, AnimeSeason? season, AnimeEpisodeShadow shadow) : base(shadow) { _title = title; _season = season; _shadow = shadow; } public void SetNumber(int? number) => _shadow.number = number; public override void SetOrder(ushort order) { if (_season == null) SetItemOrder(_title._shadow.items, Order, order); else _season.SetEpisodeOrder(Order, order); } public override void SetVariant(ushort variant) { if (_season == null) { SetItemVariant(_title._shadow.items.OfType() .Where(q => q.order == Order), Variant, variant); } else _season.SetEpisodeVariant(Order, Variant, variant); } public override void SetCompleted() { if (_season == null) _title.SetEpisodeCompleted(Order, Variant, true); else _season.SetEpisodeCompleted(Order, Variant, true); } public override void SetNotCompleted() { if (_season == null) _title.SetEpisodeCompleted(Order, Variant, false); else _season.SetEpisodeCompleted(Order, Variant, false); } public override void SetExpirationTime(TimeSpan value) { if (_season == null) _title.SetEpisodeExpirationTime(Order, Variant, value); else _season.SetEpisodeExpirationTime(Order, Variant, value); } internal void SetDeleted() => _shadow.deleted = true; } public enum AnimeEpisodeType { Regilar, FullLength, Ova, }