<?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 option reader
 */
class AttributeOptionReader 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'] : [];
        if(!$filterattribute) {
           $result= $selectedAttrs;
        } else {
           $result=array_intersect($filterattribute,$selectedAttrs);
        }

        $attributesOptions = $this->findOptionsByAttributesCodes($result);
        
        return new \ArrayIterator($attributesOptions);

    }


    protected function findOptionsByAttributesCodes($codes)
    {
        $attributeOptions = $this->repository->createQueryBuilder('o')
                ->leftJoin('o.attribute', 'a')
                ->andWhere('a.code in (:codes)')
                ->setParameter('codes', $codes)
                ->getQuery()->getResult();
        
        return $attributeOptions;
    }
}