<?php

namespace Autogedal\Retur\Cron;

use Autogedal\Retur\Model\ResourceModel\Retur\CollectionFactory;
use Autogedal\Retur\Model\ResourceModel\Retur\Status\History\CollectionFactory as HistoryFactory;
use Autogedal\Retur\Api\Data\ReturInterface;
use Autogedal\Retur\Model\Provider\StatusProvider;
use Psr\Log\LoggerInterface;
use Monolog\Logger as MonoLogger;
use Monolog\Handler\StreamHandler;
use Monolog\Level;

class Anulare
{
    /**
     * @var CollectionFactory
     */
    private $collectionFactory;

    /**
     * @var HistoryFactory
     */
    private $historyFactory;
    
    private $logger;

    public function __construct(
        CollectionFactory $collectionFactory,
        HistoryFactory $historyFactory,
        LoggerInterface $logger
    ) {
        $this->historyFactory = $historyFactory;
        $this->collectionFactory = $collectionFactory;
        $this->logger = $logger;
    }

    public function execute()
    {
        $monolog = new MonoLogger('anulareretur');
        $monolog->pushHandler(new StreamHandler(BP . '/var/log/anulare_retur.log', Level::Debug));
        $this->logger = $monolog;

        $collection = $this->collectionFactory->create();
        $collection
            ->addFieldToFilter(ReturInterface::STATUS, ['in' => StatusProvider::IN_LIVRARE]);
        foreach ($collection->getItems() as $retur) {
            $statusHistories = $retur->getStatusHistoryCollection();
            foreach ($statusHistories as $statusHistory) {
                $pastDateTime = new \DateTime($statusHistory->getCreatedAt());
                $currentDateTime = new \DateTime();
                $dateDifference = $currentDateTime->diff($pastDateTime);
                if ($dateDifference->days > 20) {
                    $retur->setStatus(StatusProvider::RETUR_ANULAT);
                    $retur->save();
                    $this->logger->info('Returul din '.$retur->getCreatedAt().' a fost anulat');
                }
            }
        }
    }
}
