using System;
using System.Collections.Generic;
using SitefinityWebApp;
using Telerik.Sitefinity;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Configuration;
using Telerik.Sitefinity.ServiceHooks;
using Telerik.Sitefinity.Services;

[assembly: SitefinityModule(HubSpotConnectivityModule.ModuleName, typeof(HubSpotConnectivityModule), "HubSpot connectivity", "", StartupType.OnApplicationStart)]
namespace SitefinityWebApp
{
    public class HubSpotConnectivityModule : ModuleBase, IServiceHookTriggerProvider, IServiceHookActionProvider
    {
        public override Guid LandingPageId
        {
            get { return Guid.Empty; }
        }

        public override void Initialize(ModuleSettings settings)
        {
            base.Initialize(settings);

            App.WorkWith().Module(Name)
                .Initialize();
        }

        public override void Install(SiteInitializer initializer)
        {

        }

        protected override ConfigSection GetModuleConfig()
        {
            return null;
        }

        public override Type[] Managers
        {
            get { return null; }
        }

        IDictionary<string, IServiceHookTriggerSettings> IServiceHookTriggerProvider.GetServiceHookTriggersSettings()
        {
            var triggerSettings = new Dictionary<string, IServiceHookTriggerSettings>();

            var loginCompletedTriggerSettings = new HubSpotConnectivityTriggerSettings();
            triggerSettings.Add(loginCompletedTriggerSettings.Key, loginCompletedTriggerSettings);

            return triggerSettings;
        }

        IDictionary<string, IServiceHookActionSettings> IServiceHookActionProvider.GetServiceHookActionsSettings()
        {
            var actionSettings = new Dictionary<string, IServiceHookActionSettings>();
            actionSettings.Add("HubSpotContactCreation", new HubSpotContactCreationActionSettings());

            return actionSettings;
        }

        internal const string ModuleName = "HubSpotConnectivity";
    }
}