<?php

declare(strict_types=1);

namespace Webkul\WebkulCsvImportBundle\Connector\Reader\File\Csv;

use Akeneo\Tool\Component\Connector\ArrayConverter\ArrayConverterInterface;
use Akeneo\Tool\Component\Connector\Reader\File\Csv\Reader;
use Akeneo\Tool\Component\Connector\Reader\File\FileIteratorFactory;
use Akeneo\Tool\Component\Connector\Reader\File\FileReaderInterface;
use Webkul\WebkulCsvImportBundle\Connector\Reader\File\MediaPathTransformer;

class ProductModelReader extends Reader implements FileReaderInterface
{
    /**
     * @param FileIteratorFactory     $fileIteratorFactory
     * @param ArrayConverterInterface $converter
     * @param MediaPathTransformer    $mediaPathTransformer
     * @param array                   $options
     */
    public function __construct(
        FileIteratorFactory $fileIteratorFactory,
        ArrayConverterInterface $converter,
        protected MediaPathTransformer $mediaPathTransformer,
        array $options = []
    ) {
        parent::__construct($fileIteratorFactory, $converter, $options);
    }

    /**
     * {@inheritdoc}
     */
    public function read()
    {
        $data = parent::read();

        if (!is_array($data) || !isset($data['values'])) {
            return $data;
        }

        $data['values'] = $this->mediaPathTransformer
            ->transform($data['values'], $this->fileIterator->getDirectoryPath());

        return $data;
    }

    /**
     * @return array
     */
    protected function getArrayConverterOptions(): array
    {
        $jobParameters = $this->stepExecution->getJobParameters();

        return [
            'mapping' => [
                $jobParameters->get('familyVariantColumn') => 'family_variant',
                $jobParameters->get('categoriesColumn') => 'categories',
            ],
            'with_associations' => false,
            'decimal_separator' => $jobParameters->get('decimalSeparator'),
            'date_format' => $jobParameters->get('dateFormat'),
        ];
    }
}
