<?php
declare(strict_types=1);

namespace Leadlion\SalesOrder\Controller\Adminhtml\Order;
 
use Magento\Framework\Controller\ResultFactory;
use Magento\Backend\App\Action\Context;
use Magento\Backend\App\Action;
use Magento\Sales\Model\Order;
use Magento\Sales\Api\OrderRepositoryInterface;

class UpdateStatus extends Action
{
    /**
     * @var OrderRepositoryInterface
     */
    protected $orderRepository;

    /**
     * @param OrderRepositoryInterface $orderRepository
     */
    public function __construct(
        Context $context,
        OrderRepositoryInterface $orderRepository
    ) {
        $this->orderRepository = $orderRepository;
        parent::__construct($context);
    }

    /**
     * Execute action
     *
     * @return Redirect
     * @throws LocalizedException
     */
    public function execute()
    {
        $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
        if($this->getRequest()->getParam('order_id') != '') {
            $orderId = $this->getRequest()->getParam('order_id');
            try {
                $orderObject = $this->orderRepository->get($orderId);
                $orderObject->setData('state', Order::STATE_COMPLETE);
                $orderObject->setData('status', Order::STATE_COMPLETE);
                $orderObject->addStatusToHistory($orderObject->getStatus(), 'Order Status : '. Order::STATE_COMPLETE);
                $orderObject->save();
                $this->messageManager->addSuccess(__('Order has been updated successfully.'));
            } catch (\Exception $e) {
                $this->messageManager->addException($e, __('Something went wrong while saving the data.'));
                return $resultRedirect->setPath(
                    'sales/order/view',
                    [
                        'order_id' => $orderId,
                    ]
                );
            }
        }
        return $resultRedirect->setPath(
            'sales/order/view',
            [
                'order_id' => $orderId,
            ]
        );
    }
}

