using System.Threading;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Api.Series;
using System.Linq;
using NzbDrone.Test.Common;

namespace NzbDrone.Integration.Test
{
    [TestFixture]
    public class EpisodeIntegrationTests : IntegrationTest
    {
        private SeriesResource GivenSeriesWithEpisodes()
        {
            var series = Series.Lookup("archer").First();

            series.QualityProfileId = 1;
            series.Path = @"C:\Test\Archer".AsOsAgnostic();

            series = Series.Post(series);

            while (true)
            {
                if (Episodes.GetEpisodesInSeries(series.Id).Count > 0)
                {
                    return series;
                }

                Thread.Sleep(1000);
            }
        }

        [Test]
        public void should_be_able_to_get_all_episodes_in_series()
        {
            var series = GivenSeriesWithEpisodes();
            Episodes.GetEpisodesInSeries(series.Id).Count.Should().BeGreaterThan(0);
        }

        [Test]
        public void should_be_able_to_get_a_single_episode()
        {
            var series = GivenSeriesWithEpisodes();
            var episodes = Episodes.GetEpisodesInSeries(series.Id);

            Episodes.Get(episodes.First().Id).Should().NotBeNull();
        }

        [Test]
        public void should_be_able_to_set_monitor_status_via_api()
        {
            var series = GivenSeriesWithEpisodes();
            var episodes = Episodes.GetEpisodesInSeries(series.Id);
            var updatedEpisode = episodes.First();
            updatedEpisode.Monitored = false;

            Episodes.Put(updatedEpisode).Monitored.Should().BeFalse();
        }
    }
}