<?php

declare(strict_types=1);

namespace Autogedal\AwbRetry\Controller\Adminhtml\Error;

use Autogedal\AwbRetry\Model\Queue\RetryRequestPublisher;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Controller\Result\Redirect;
class Retry extends Action
{
    public const ADMIN_RESOURCE = 'Autogedal_AwbRetry::awb_errors';

    public function __construct(
        Context $context,
        private readonly RetryRequestPublisher $retryRequestPublisher
    ) {
        parent::__construct($context);
    }

    public function execute(): Redirect
    {
        /** @var Redirect $resultRedirect */
        $resultRedirect = $this->resultRedirectFactory->create();
        $errorLogId = (int) $this->getRequest()->getParam('id');

        if (!$errorLogId) {
            $this->messageManager->addErrorMessage(__('Missing AWB error log ID.'));
            return $resultRedirect->setPath('*/*/index');
        }

        try {
            $this->retryRequestPublisher->queue($errorLogId, RetryRequestPublisher::RETRY_MODE_MANUAL);
            $this->messageManager->addSuccessMessage(__('AWB manual retry has been queued.'));
        } catch (\Throwable $e) {
            $this->messageManager->addExceptionMessage($e, __('Unable to queue the AWB manual retry.'));
        }

        return $resultRedirect->setPath('*/*/index');
    }

    protected function _isAllowed(): bool
    {
        return $this->_authorization->isAllowed(self::ADMIN_RESOURCE);
    }
}
