<?php

declare(strict_types=1);

namespace Autogedal\RemoveSubscriber\Observer;

use Autogedal\Extend\Model\TheMarketer\SyncContext;
use Autogedal\RemoveSubscriber\Model\RemoveSubscriberService;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Newsletter\Model\Subscriber;

class NewsletterUnsubscribeObserver implements ObserverInterface
{
    public function __construct(
        private readonly RemoveSubscriberService $removeSubscriberService,
        private readonly SyncContext $syncContext
    ) {
    }

    public function execute(Observer $observer): void
    {
        if ($this->syncContext->isWebhookRequest() || $this->syncContext->isGdprAnonymization()) {
            return;
        }

        /** @var Subscriber $subscriber */
        $subscriber = $observer->getEvent()->getSubscriber();

        if ((int) $subscriber->getStatus() !== Subscriber::STATUS_UNSUBSCRIBED) {
            return;
        }

        $email = $subscriber->getSubscriberEmail();
        if (!$email) {
            return;
        }

        $this->removeSubscriberService->execute($email);
    }
}
