using Newtonsoft.Json;

namespace NzbDrone.Core.Indexers
{
    public interface IProviderIndexerSetting
    {
        TSetting Get<TSetting>(IIndexer indexer) where TSetting : IIndexerSetting, new();
    }

    public class IndexerSettingProvider : IProviderIndexerSetting
    {
        private readonly IIndexerRepository _indexerRepository;

        public IndexerSettingProvider(IIndexerRepository indexerRepository)
        {
            _indexerRepository = indexerRepository;
        }

        public TSetting Get<TSetting>(IIndexer indexer) where TSetting : IIndexerSetting, new()
        {
            var indexerDef = _indexerRepository.Find(indexer.Name);

            if (indexerDef == null || string.IsNullOrWhiteSpace(indexerDef.Settings))
            {
                return new TSetting();
            }

            return JsonConvert.DeserializeObject<TSetting>(indexerDef.Settings);
        }
    }
}