<?php

namespace Webkul\WooCommerceBundle\Connector\Reader;

use Doctrine\Common\Persistence\ObjectRepository;
use Webkul\WooCommerceBundle\Services\WooCommerceConnector;
use Webkul\WooCommerceBundle\Listener\ClassDefinationForCompatibility;

$obj = new ClassDefinationForCompatibility();
$obj->objectCreate();
/**
 * attribute reader, basic
 */
class AttributeReader extends \AbstractReader implements
    \ItemReaderInterface,
    \InitializableInterface,
    \StepExecutionAwareInterface
{
    /** @var ObjectRepository */
    protected $repository;
    protected $connectorService;
    
    /**
     * @param ObjectRepository $repository
     */

    public function __construct(ObjectRepository $repository, WooCommerceConnector $connectorService)
    {
        $this->repository = $repository;
        $this->connectorService = $connectorService;
    }

    /**
     * {@inheritdoc}
     */

    protected function getResults()
    {
        $filters = $this->stepExecution->getJobParameters()->get('filters');
        $filterattribute = !empty($filters['structure']['attributes']) ? $filters['structure']['attributes'] : [];
        
        $mappings = $this->connectorService->getMultiOtherMappings();
        $selectedAttrs = !empty($mappings['custom_fields']) ? $mappings['custom_fields'] : [];
        $files = $this->connectorService->getMultiOtherMappings()['files'] ?? [];
        $selectedAttrs = array_unique(array_merge($selectedAttrs, $files));
        
        if(!$filterattribute) {
          $result= $selectedAttrs;
        } else {
           $result=array_intersect($filterattribute,$selectedAttrs);
        }
        
        $attributes = $this->findAttributesByCodes($result);
        return new \ArrayIterator($attributes);
    
    }
    
    

    protected function findAttributesByCodes($codes)
    {
        return $this->repository->createQueryBuilder('a')
                ->andWhere('a.code in (:codes)')
                ->setParameter('codes', $codes)
                ->getQuery()->getResult();
    }


}