protected override void When(object evt)
 {
     State = evt switch
     {
         V1.ScreeningScheduled e => State.With(x =>
         {
             x.Id       = e.ScreeningId;
             x.Capacity = e.TheaterCapacity;
         }),
         V1.SeatReserved e => State.When(e),
         _ => State
     };
 }
        public void Schedule(
            string screeningId,
            Movie movie, Theater theater,
            DateTimeOffset startsAt
            )
        {
            if (Version >= 0)
            {
                throw new InvalidOperationException("Can't do that, go away");
            }

            var evt = new V1.ScreeningScheduled
            {
                ScreeningId       = screeningId,
                MovieId           = movie.Id,
                TheaterId         = theater.Id,
                TheaterCapacity   = theater.Capacity,
                DurationInMinutes = movie.DurationInMinutes,
                StartsAt          = startsAt
            };

            Apply(evt);
        }