<?php

namespace Leadlion\Autogedal\Controller\Plugin\Subscriber;

use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Controller\Result\Redirect;
use Magento\Framework\Message\ManagerInterface;
use Magento\Framework\Message\MessageInterface;

class NewAction
{
    public function __construct(
        private readonly JsonFactory $resultJsonFactory,
        private readonly ManagerInterface $messageManager
    ) {
    }

    public function aroundExecute($subject, $proceed)
    {
        $result = $proceed();

        if ($subject->getRequest()->isAjax()) {
            $response = [];
            $messages = $this->messageManager->getMessages(true);
            $error = false;
            $msg = '';
            foreach ($messages->getItems() as $message) {
                if ($message->getType() == MessageInterface::TYPE_ERROR) {
                    $error = true;
                }
                
                if (method_exists($message, 'getData') && is_array($message->getData()) && isset($message->getData()['message'])) {
                    $msg .= $message->getData()['message'] . '<br/>';
                } else {
                    $msg .= $message->getText() . '<br/>';
                }
            }

            if (!$msg) {
                if ($result instanceof Redirect) {
                    $msg = __('Request processed.');
                }
            }

            if ($error) {
                $response = [
                    'status' => 'ERROR',
                    'msg' => $msg,
                ];
            } else {
                $response = [
                    'status' => 'OK',
                    'msg' => $msg,
                ];
            }

            return $this->resultJsonFactory->create()->setData($response);
        }

        return $result;
    }
}
