using System;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;

namespace NzbDrone.Core.Providers.ExternalNotification
{
    public abstract class ExternalNotificationBase
    {
        protected readonly Logger _logger;
        protected readonly ConfigProvider _configProvider;

        protected ExternalNotificationBase(ConfigProvider configProvider)
        {
            _configProvider = configProvider;
            _logger = LogManager.GetLogger(GetType().ToString());
        }

        /// <summary>
        ///   Gets the name for the notification provider
        /// </summary>
        public abstract string Name { get; }

        /// <summary>
        ///   Performs the on grab action
        /// </summary>
        /// <param name = "message">The message to send to the receiver</param>
        public abstract void OnGrab(string message);

        /// <summary>
        ///   Performs the on download action
        /// </summary>
        /// <param name = "message">The message to send to the receiver</param>
        /// <param name = "series">The Series for the new download</param>
        public abstract void OnDownload(string message, Series series);

        /// <summary>
        ///   Performs the on rename action
        /// </summary>
        /// <param name = "message">The message to send to the receiver</param>
        /// <param name = "series">The Series for the new download</param>
        public abstract void OnRename(string message, Series series);

        /// <summary>
        ///   Performs the after rename action, this will be handled after all renaming for episode/season/series
        /// </summary>
        /// <param name = "message">The message to send to the receiver</param>
        /// <param name = "series">The Series for the new download</param>
        public abstract void AfterRename(string message, Series series);
    }
}