<?php

namespace Autogedal\TbiBank\Setup\Patch\Data;

use Autogedal\TbiBank\Model\ApprovalConfig;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\StatusFactory;
use Magento\Sales\Model\ResourceModel\Order\Status as StatusResource;

class AddWaitingStatus implements DataPatchInterface
{
    public function __construct(
        private StatusFactory $statusFactory,
        private StatusResource $statusResource,
        private ResourceConnection $resource
    )
    {
    }

    public function apply()
    {
        foreach ([ApprovalConfig::WAITING_STATUS => 'Asteptare Plata TBI'] as $code => $label) {
            $status = $this->statusFactory->create();
            $this->statusResource->load($status, $code);
            if (!$status->getStatus()) {
                $status->setStatus($code)->setLabel($label);
                $this->statusResource->save($status);
            }
            // Do not change the existing default status or overwrite an existing label.
            $connection = $this->resource->getConnection();
            foreach ([Order::STATE_NEW, ApprovalConfig::ORDER_STATE] as $state) {
                $assigned = $connection->fetchOne(
                    $connection->select()->from($this->resource->getTableName('sales_order_status_state'), 'status')
                        ->where('status = ?', $code)->where('state = ?', $state)
                );
                if (!$assigned) {
                    $this->statusResource->assignState($code, $state, false, true);
                }
            }
        }
        return $this;
    }

    public static function getDependencies(): array
    {
        return [];
    }

    public function getAliases(): array
    {
        return [];
    }
}
