<?php
declare(strict_types=1);

namespace Autogedal\PayPo\Setup\Patch\Data;

use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Status;
use Magento\Sales\Model\Order\StatusFactory;

class AddWaitingPayPoStatus implements DataPatchInterface
{
    private const STATUS_CODE = 'asteptare_plata_paypo';
    private const STATUS_LABEL = 'Asteptare Plata PayPo';

    public function __construct(
        private readonly ModuleDataSetupInterface $setup,
        private readonly StatusFactory $statusFactory
    ) {
    }

    public function apply(): self
    {
        $this->setup->startSetup();

        /** @var Status $status */
        $status = $this->statusFactory->create();
        $status->load(self::STATUS_CODE, 'status');

        if (!$status->getData('status')) {
            $status->setData([
                'status' => self::STATUS_CODE,
                'label'  => self::STATUS_LABEL,
            ]);
            $status->save();
        }

        $status->assignState(Order::STATE_NEW, false, true);

        $this->setup->endSetup();

        return $this;
    }

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

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