using System;
using System.Linq;
using NLog;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Model;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model;

namespace NzbDrone.Core.DecisionEngine.Specifications
{
    public class AllowedReleaseGroupSpecification : IDecisionEngineSpecification
    {
        private readonly IConfigService _configService;
        private readonly Logger _logger;

        public AllowedReleaseGroupSpecification(IConfigService configService, Logger logger)
        {
            _configService = configService;
            _logger = logger;
        }


        public string RejectionReason
        {
            get
            {
                return "Release group is blacklisted.";
            }
        }

        public virtual bool IsSatisfiedBy(RemoteEpisode subject)
        {
            _logger.Trace("Beginning release group check for: {0}", subject);

            //Todo: Make this use NzbRestrictions - How should whitelist be used? Will it override blacklist or vice-versa?

            var allowed = _configService.AllowedReleaseGroups;

            if (string.IsNullOrWhiteSpace(allowed))
                return true;

            var reportReleaseGroup = subject.Report.ReleaseGroup.ToLower();

            return allowed.ToLower().Split(',').Any(allowedGroup => allowedGroup.Trim() == reportReleaseGroup);
        }
    }
}