using Grand.Business.Core.Interfaces.Common.Localization;
using Grand.Business.Core.Interfaces.Marketing.Newsletters;
using Grand.Web.Commands.Models.Newsletter;
using Grand.Web.Models.Newsletter;
using MediatR;

namespace Grand.Web.Commands.Handler.Newsletter;

public class SubscriptionActivationHandler : IRequestHandler<SubscriptionActivationCommand, SubscriptionActivationModel>
{
    private readonly INewsLetterSubscriptionService _newsLetterSubscriptionService;
    private readonly ITranslationService _translationService;

    public SubscriptionActivationHandler(INewsLetterSubscriptionService newsLetterSubscriptionService,
        ITranslationService translationService)
    {
        _newsLetterSubscriptionService = newsLetterSubscriptionService;
        _translationService = translationService;
    }

    public async Task<SubscriptionActivationModel> Handle(SubscriptionActivationCommand request,
        CancellationToken cancellationToken)
    {
        var subscription = await _newsLetterSubscriptionService.GetNewsLetterSubscriptionByGuid(request.Token);
        if (subscription == null)
            return null;

        var model = new SubscriptionActivationModel();

        if (request.Active)
        {
            subscription.Active = true;
            await _newsLetterSubscriptionService.UpdateNewsLetterSubscription(subscription);
        }
        else
        {
            await _newsLetterSubscriptionService.DeleteNewsLetterSubscription(subscription);
        }

        model.Result = request.Active
            ? _translationService.GetResource("Newsletter.ResultActivated")
            : _translationService.GetResource("Newsletter.ResultDeactivated");

        return model;
    }
}