<?php
declare(strict_types=1);

namespace Autogedal\BlackFriday\Observer;

use Autogedal\BlackFriday\Model\SubscriberStorage;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Newsletter\Model\Subscriber;
use Psr\Log\LoggerInterface;

/** Unsubscribed from the newsletter: no launch email (visible in the admin grid); subscribed again: pending again. */
class NewsletterStatus implements ObserverInterface
{
    public function __construct(
        private readonly SubscriberStorage $storage,
        private readonly LoggerInterface $logger
    ) {
    }

    public function execute(Observer $observer): void
    {
        /** @var Subscriber $subscriber */
        $subscriber = $observer->getEvent()->getSubscriber();
        $email = (string)$subscriber->getSubscriberEmail();
        if ($email === '') {
            return;
        }
        try {
            match ((int)$subscriber->getSubscriberStatus()) {
                Subscriber::STATUS_UNSUBSCRIBED => $this->storage->skipUnsubscribed($email),
                Subscriber::STATUS_SUBSCRIBED => $this->storage->restoreSubscribed($email),
                default => null,
            };
        } catch (\Throwable $e) {
            // never block the newsletter save
            $this->logger->error('Black Friday newsletter status sync: ' . $e->getMessage(), ['exception' => $e]);
        }
    }
}
