using System;
using System.Collections.Generic;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Qualities;
using NzbDrone.Api.Mapping;
using System.Linq;

namespace NzbDrone.Api.Qualities
{
    public class QualityProfileSchemaModule : NzbDroneRestModule<QualityProfileResource>
    {
        public QualityProfileSchemaModule()
            : base("/qualityprofiles/schema")
        {
            GetResourceAll = GetAll;
        }

        private List<QualityProfileResource> GetAll()
        {
            var profile = new QualityProfile();
            profile.Cutoff = Quality.Unknown;
            profile.Allowed = new List<Quality>();

            return new List<QualityProfileResource>{ QualityToResource(profile)};
        }

        private static QualityProfileResource QualityToResource(QualityProfile profile)
        {
            return new QualityProfileResource
                {
                    Available = Quality.All()
                        .Where(c => !profile.Allowed.Any(q => c.Id == q.Id))
                        .InjectTo<List<QualityResource>>(),

                    Allowed = profile.Allowed.InjectTo<List<QualityResource>>(),
                    Name = profile.Name,
                    Id = profile.Id
                };
        }
    }
}