<?php

declare(strict_types=1);

namespace Autogedal\AwbRetry\Plugin\Adminhtml;

use Autogedal\AwbRetry\Model\AwbErrorLogManager;
use Magento\Backend\Block\Widget\Button\ButtonList;
use Magento\Backend\Block\Widget\Button\Toolbar;
use Magento\Framework\Escaper;
use Magento\Framework\UrlInterface;
use Magento\Framework\View\Element\AbstractBlock;
use Magento\Sales\Block\Adminhtml\Order\View as OrderView;

class OrderViewButtonPlugin
{
    private const BUTTON_ID = 'autogedal_awb_errors';

    public function __construct(
        private readonly UrlInterface $urlBuilder,
        private readonly Escaper $escaper,
        private readonly AwbErrorLogManager $errorLogManager
    ) {
    }

    public function beforePushButtons(
        Toolbar $subject,
        AbstractBlock $context,
        ButtonList $buttonList
    ): void {
        if (!$context instanceof OrderView) {
            return;
        }

        $order = $context->getOrder();
        $orderId = (int) ($order ? $order->getId() : 0);
        if ($orderId <= 0 || !$this->errorLogManager->hasOrderErrors($orderId)) {
            return;
        }

        $url = $this->urlBuilder->getUrl('awb_retry/error/index', ['order_id' => $orderId]);
        $context->addButton(
            self::BUTTON_ID,
            [
                'label' => __('AWB Errors'),
                'class' => 'awb-errors-button action-secondary',
                'onclick' => sprintf(
                    "window.open('%s', '_blank', 'noopener,noreferrer')",
                    $this->escaper->escapeJs($url)
                ),
            ],
            0,
            250,
            'toolbar'
        );
    }
}
