<?php
declare(strict_types=1);

namespace Autogedal\Extend\Plugin;


use Aitoc\DeleteOrders\Model\ResourceModel\Archive\Grid\Collection as ArchiveCollection;
use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as OrderCollection;
use Aitoc\DeleteOrders\Model\ResourceModel\Archive as ArchiveModel;

/**
 * Class FilterCollection
 * Class provides after Plugin on Magento\Framework\View\Element\UiComponent\DataProvider\Reporting::search
 * to edit data in order grid collection
 */
class AitocArchiveFilterCollection
{
    /**
     * After search method
     *
     * @param array $subject
     * @param array $collection
     * @return ArchiveCollection|OrderCollection|mixed
     */
    public function afterSearch($subject, $collection)
    {
        if ($collection instanceof ArchiveCollection && !$collection->getFlag('archive_filter')) {
            $collection->joinSalesOrdeGridTable();
            $collection->clear()->load();
            $collection->setFlag('archive_filter', true);
        } elseif ($collection instanceof OrderCollection && !$collection->getFlag('archive_filter')) {
            $collection->getSelect()->joinLeft(
                ['archive_table' => $collection->getTable(ArchiveModel::TABLE_NAME)],
                'main_table.entity_id = archive_table.order_id',
                ['order_id']
            );
            $collection->addFieldToFilter('archive_table.order_id', ['null' => true]);
            $collection->clear()->load();
            $collection->setFlag('archive_filter', true);
        }

        return $collection;
    }
}