<?php

namespace Webkul\WooCommerceBundle\EventListener;

use Symfony\Component\EventDispatcher\GenericEvent;
use Webkul\WooCommerceBundle\Entity\EntityTracker;
use Webkul\WooCommerceBundle\Services\WooCommerceConnector;

class EntityModificationRemoveListener
{
    private $em;
    protected $connectorService;

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

    public function onPreSave(GenericEvent $event)
    {
        $subject = $event->getSubject();
        $id = $subject->getId();
        
        if(class_exists('Akeneo\Component\Versioning\Model\Version')) {
            $versionClass = 'Akeneo\Component\Versioning\Model\Version';
        } elseif(class_exists('Akeneo\Tool\Component\Versioning\Model\Version')) {
            $versionClass = 'Akeneo\Tool\Component\Versioning\Model\Version';
        }        

        if(get_class($subject) === $versionClass) {
            if($subject->getContext() === 'Deleted') {
                $snapshot = $subject->getSnapshot();    
                     
           
                $resourceName = $subject->getResourceName();

                $action = 'delete';
                $entity = $this->getEntityByClassName($resourceName);
                $code = $snapshot['code'] ?? ($snapshot['sku']);
            }
        } else {
            $action = 'save';
            $entity = $this->getEntityByClassName(get_class($subject));
            $code = method_exists($subject, 'getCode') ? $subject->getCode() : (method_exists($subject, 'getIdentifier') ? $subject->getIdentifier() : null);
        }
        
      
        if(!empty($entity) && !empty($code) ) {
            $this->updateOrCreateTrackByEntityCodeAndAction($entity, $code, $action);
        } 
    }
    

    // protected function getEntityByClassName($className) 
    // {
        
    //     $entity = null;
    //     if(preg_match("#Category$#", $className)) {
    //         $entity = 'category';
    //     } else if(preg_match("#Attribute$#", $className)) {
    //         $entity = 'attribute';
    //     } else if(preg_match("#AttributeOption$#", $className)) {
    //         $entity = 'option';            
    //     } else if(preg_match("#Family$#", $className)) {
    //         $entity = 'family';
    //     } else if(preg_match("#AttributeGroup$#", $className)) {
    //         $entity = 'group';
    //     } else if(preg_match("#Product$#", $className)) {
    //         $entity = 'product';
    //     } else if(preg_match("#ProductModel$#", $className)) {
    //         $entity = 'product';
    //     } else {
    //         // don't do anything
    //         return;
    //     }
        
       
    //     return $entity;
    // }

    // protected function updateOrCreateTrackByEntityCodeAndAction($entity, $code, $action)
    // {
    //     $repo = $this->em->getRepository('WooCommerceBundle:EntityTracker');
    //     $track = $repo->findOneBy(['entityType' => $entity, 'code' => $code]);
        
    //     if(!$track) {
    //         $track = new EntityTracker();
    //     }
    //     $track->setEntityType($entity);
    //     $track->setCode($code);
    //     $track->setAction($action);
    //     $this->em->persist($track);
    //     $this->em->flush();
    // }

    
}
