<?php

declare(strict_types=1);

/**
 * Decrement promo-rule guest usage when an order is cancelled.
 */

namespace Autogedal\PromoRules\Plugin\Sales\Model\Service;

use Autogedal\PromoRules\Model\Rule\PolicyManager;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Sales\Model\Service\OrderService;

/**
 * Mirrors order cancellation into the guest promo usage table.
 */
class OrderServicePlugin
{
    /**
     * @param PolicyManager $policyManager
     * @param OrderRepositoryInterface $orderRepository
     */
    public function __construct(
        private readonly PolicyManager $policyManager,
        private readonly OrderRepositoryInterface $orderRepository
    ) {
    }

    /**
     * Decrement tracked guest usage after a successful order cancellation.
     *
     * @param OrderService $subject
     * @param bool $result
     * @param int $orderId
     * @return bool
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function afterCancel(OrderService $subject, bool $result, $orderId): bool
    {
        if (!$result) {
            return false;
        }

        $order = $this->orderRepository->get((int) $orderId);
        $this->policyManager->syncGuestEmailUsage($order, false);

        return true;
    }
}
