private async Task <Either <Error, Unit> > EnsureScheduleExistsAsync(CancellationToken cancellationToken)
        {
            var programScheduleApi = new ProgramScheduleApi(_serverUrl);

            Option <ProgramScheduleViewModel> maybeExisting = await programScheduleApi
                                                              .ApiSchedulesGetAsync(cancellationToken)
                                                              .Map(list => list.SingleOrDefault(schedule => schedule.Name == Name));

            await maybeExisting.Match(
                existing =>
            {
                // TODO: update playback order if changed?
                _logger.LogInformation("Schedule {Schedule} is already present", Name);

                if (Reset)
                {
                    return(programScheduleApi
                           .ApiSchedulesProgramScheduleIdItemsDeleteAsync(existing.Id, cancellationToken)
                           .Iter(_ => _logger.LogInformation("Successfully reset schedule {Schedule}", Name)));
                }

                return(Task.CompletedTask);
            },
                () =>
            {
                var data = new CreateProgramSchedule(Name, Order);
                return(programScheduleApi.ApiSchedulesPostAsync(data, cancellationToken)
                       .Iter(_ => _logger.LogInformation("Successfully created schedule {Schedule}", Name)));
            });

            return(unit);
        }