<?php

namespace Firebear\ImportExport\Test\Integration\Helpers;

use Firebear\ImportExport\Model\JobFactory;
use Firebear\ImportExport\Api\JobRepositoryInterface;
use Firebear\ImportExport\Model\ExportJobFactory;
use Firebear\ImportExport\Api\ExportJobRepositoryInterface;

class JobFixturesManager
{
    /**
     * @var JobFactory
     */
    private $jobFactory;

    /**
     * @var JobRepositoryInterface
     */
    private $jobRepository;

    /**
     * @var ExportJobFactory
     */
    private $exportJobFactory;
    /**
     * @var ExportJobRepositoryInterface
     */
    private $exportJobRepository;

    /**
     * JobFixturesManager constructor.
     * @param JobFactory $jobFactory
     * @param JobRepositoryInterface $jobRepository
     * @param ExportJobFactory $exportJobFactory
     * @param ExportJobRepositoryInterface $exportJobRepository
     */
    public function __construct(
        JobFactory $jobFactory,
        JobRepositoryInterface $jobRepository,
        ExportJobFactory $exportJobFactory,
        ExportJobRepositoryInterface $exportJobRepository
    ) {
        $this->jobFactory = $jobFactory;
        $this->jobRepository = $jobRepository;
        $this->exportJobFactory = $exportJobFactory;
        $this->exportJobRepository = $exportJobRepository;
    }

    /**
     * @return array
     */
    public function getDefaultJobData()
    {
        return include(__DIR__ . '/../_files/defaultJobParams.php');
    }

    /**
     * @return array
     */
    public function getDefaultExportJobData()
    {
        return include(__DIR__ . '/../_files/defaultExportJobParams.php');
    }

    /**
     * @param array $overriddenData
     * @return \Firebear\ImportExport\Api\Data\ImportInterface
     * @throws \Magento\Framework\Exception\CouldNotSaveException
     */
    public function createImportJob($overriddenData = [])
    {
        $defaultData = $this->getDefaultJobData();
        $data = array_replace_recursive($defaultData, $overriddenData);

        $model = $this->jobFactory->create();
        $model->addData($data);
        return $this->jobRepository->save($model);
    }

    /**
     * @param array $overriddenData
     * @return \Firebear\ImportExport\Api\Data\ExportInterface
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function createExportJob($overriddenData = [])
    {
        $defaultData = $this->getDefaultExportJobData();
        $data = array_replace_recursive($defaultData, $overriddenData);

        $model = $this->exportJobFactory->create();
        $model->addData($data);
        return $this->exportJobRepository->save($model);
    }
}
