/// <summary>
 /// Initializes a new instance of the <see cref="LearningPlanNotification"/> class.
 /// BackgroundService class that inherits IHostedService and implements the methods related to sending notification tasks.
 /// </summary>
 /// <param name="logger">Instance to send logs to the Application Insights service.</param>
 /// <param name="userStorageProvider">Provider for fetching information about user details from storage.</param>
 /// <param name="learningPlanHelper">Instance of learning plan helper.</param>
 /// <param name="sharePointOptions">A set of key/value application configuration properties for SharePoint.</param>
 /// <param name="notificationCardHelper">Helper for working with bot notification card.</param>
 /// <param name="localizer">The current culture's string localizer.</param>
 /// <param name="botOptions">A set of key/value application configuration properties.</param>
 public LearningPlanNotification(
     ILogger <LearningPlanNotification> logger,
     IUserStorageProvider userStorageProvider,
     ILearningPlanHelper learningPlanHelper,
     IOptions <SharePointSettings> sharePointOptions,
     INotificationCardHelper notificationCardHelper,
     IStringLocalizer <Strings> localizer,
     IOptions <BotOptions> botOptions)
 {
     this.logger                    = logger;
     this.sharePointOptions         = sharePointOptions ?? throw new ArgumentNullException(nameof(sharePointOptions));
     this.userStorageProvider       = userStorageProvider;
     this.learningPlanHelper        = learningPlanHelper;
     this.sharePointOptions         = sharePointOptions;
     this.notificationCardHelper    = notificationCardHelper;
     this.defaultLearningPlanInWeek = sharePointOptions.Value.NewHireLearningPlansInWeeks > 0 ? sharePointOptions.Value.NewHireLearningPlansInWeeks : 4;
     this.localizer                 = localizer;
     this.botOptions                = botOptions ?? throw new ArgumentNullException(nameof(botOptions));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ActivityHandler{T}"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 /// <param name="localizer">The current culture's string localizer.</param>
 /// <param name="telemetryClient">Instance of telemetry client. </param>
 /// <param name="userState">State management object for maintaining user conversation state.</param>
 /// <param name="adapter">Bot adapter used to handle bot framework HTTP requests.</param>
 /// <param name="conversationState">State management object for maintaining conversation state.</param>
 /// <param name="botOptions">A set of key/value application configuration properties for bot.</param>
 /// <param name="storageOptions">A set of key/value application configuration properties for storage.</param>
 /// <param name="teamStorageProvider">Provider for fetching information about team details from storage.</param>
 /// <param name="userStorageProvider">Provider for fetching information about user details from storage.</param>
 /// <param name="learningPlanHelper">Instance of learning plan helper.</param>
 /// <param name="introductionStorageProvider">Provider for fetching information about new hire introduction details from storage.</param>
 /// <param name="tokenHelper">Helper for JWT token generation and validation.</param>
 /// <param name="activityHelper">Helper for working with bot activity handler.</param>
 /// <param name="notificationCardHelper">Helper for working with bot notification card.</param>
 /// <param name="introductionCardHelper">Helper for working with introduction cards.</param>
 /// <param name="sharePointOptions">A set of key/value application configuration properties for SharePoint.</param>
 /// <param name="dialog">Base class for all bot dialogs.</param>
 public ActivityHandler(
     ILogger <ActivityHandler> logger,
     IStringLocalizer <Strings> localizer,
     TelemetryClient telemetryClient,
     UserState userState,
     IBotFrameworkHttpAdapter adapter,
     ConversationState conversationState,
     IOptions <BotOptions> botOptions,
     IOptions <StorageSettings> storageOptions,
     ITeamStorageProvider teamStorageProvider,
     IUserStorageProvider userStorageProvider,
     ILearningPlanHelper learningPlanHelper,
     IIntroductionStorageProvider introductionStorageProvider,
     ITokenHelper tokenHelper,
     IActivityHelper activityHelper,
     INotificationCardHelper notificationCardHelper,
     IIntroductionCardHelper introductionCardHelper,
     IOptions <SharePointSettings> sharePointOptions,
     T dialog)
 {
     this.logger                      = logger;
     this.localizer                   = localizer;
     this.telemetryClient             = telemetryClient;
     this.userState                   = userState;
     this.adapter                     = adapter;
     this.conversationState           = conversationState;
     this.botOptions                  = botOptions ?? throw new ArgumentNullException(nameof(botOptions));
     this.storageOptions              = storageOptions ?? throw new ArgumentNullException(nameof(storageOptions));
     this.teamStorageProvider         = teamStorageProvider;
     this.userStorageProvider         = userStorageProvider;
     this.learningPlanHelper          = learningPlanHelper;
     this.introductionStorageProvider = introductionStorageProvider;
     this.tokenHelper                 = tokenHelper;
     this.activityHelper              = activityHelper;
     this.notificationCardHelper      = notificationCardHelper;
     this.introductionCardHelper      = introductionCardHelper;
     this.sharePointOptions           = sharePointOptions ?? throw new ArgumentNullException(nameof(sharePointOptions));
     this.dialog                      = dialog;
 }