<?php
namespace OfficeBrain\Bundle\ActivityBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use OfficeBrain\Bundle\CoreBundle\Cache\RedisCacheService;

/**
* @author OfficeBrain 4116 <info@officebrain.com>
*
* Description :  Doctrine Event 
*
**/

class PostEventListener
{
    protected $container;
    protected $activityManager;
    protected $logParameters;
    
    public function __construct(Container $container)
    {
        $this->container = $container;
        $this->activityManager = null;
    }
    
    public function postPersist(LifecycleEventArgs $lifecycleEventArgs)
    {
        $this->removeCache($lifecycleEventArgs);
    }
    
    public function postUpdate(LifecycleEventArgs $lifecycleEventArgs)
    {
        $this->removeCache($lifecycleEventArgs);
    }
    
    public function postRemove(LifecycleEventArgs $lifecycleEventArgs)
    {
        $this->removeCache($lifecycleEventArgs);
    }
    
    private function removeCache($lifecycleEventArgs)
    {
        $entity = $lifecycleEventArgs->getEntity();
        $entityManager = $lifecycleEventArgs->getEntityManager();
        
        $entityName = $entityManager->getClassMetadata(get_class($entity))->getName();
        //echo $entityName;
        $matches = array();
        $s = preg_match('/Entity(.)[a-zA-Z]*/', $entityName, $matches);
        //print_r($matches);
        $entity=trim(!empty($matches[0])?$matches[0]:'Query');
        $entity=str_replace('\\', ':', $entity);
        $cacheId = "ResultCache:".$entity;//.':*';//.md5($dql);
        
        //echo "===Listener=removeCache============$cacheId===========";
        $cacheClient=RedisCacheService::create('','doctrinecache');// $this->container->get('redis_cache_wrapper_database');
        //echo "====================".get_class($cacheClient->getCache())."=========";
        //print_r(get_class_methods(get_class($cacheClient->getCache())));
        if(is_object($cacheClient) && ('OfficeBrain\Bundle\CoreBundle\Cache\Redis'==get_class($cacheClient)))
        {
          $data=$cacheClient->removeChildCacheOfDatabase($cacheId);
        }
    }
    
    public function removeCachebyEntityName($cacheId='')
    {
        //echo "====cacheId1111============$cacheId===========";
        $cacheClient=RedisCacheService::create('','doctrinecache');// $this->container->get('redis_cache_wrapper_database');
        //echo "====================".get_class($cacheClient->getCache())."=========";
        //print_r(get_class_methods(get_class($cacheClient->getCache())));
        if(is_object($cacheClient) && ('OfficeBrain\Bundle\CoreBundle\Cache\Redis'==get_class($cacheClient)))
        {
          $data=$cacheClient->removeChildCacheOfDatabase($cacheId);
        }
    }
    public function removeCachebyEntityNamePrefix($cacheId='')
    {
        //echo "====cacheId1111============$cacheId===========";
        $cacheClient=RedisCacheService::create('','doctrinecache');// $this->container->get('redis_cache_wrapper_database');
        //echo "====================".get_class($cacheClient->getCache())."=========";
        //print_r(get_class_methods(get_class($cacheClient->getCache())));
        if(is_object($cacheClient) && ('OfficeBrain\Bundle\CoreBundle\Cache\Redis'==get_class($cacheClient)))
        {
          $data=$cacheClient->removeCacheByPrefix($cacheId);
        }
    }
}
