<?php

namespace OfficeBrain\Bundle\AccessManagementBundle\Listener;

use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;

/**
 * Request listener for serving response from cache.
 *
 * Response listener for caching response to cache
 *
 * @author OfficeBrain 4116 <info@officebrain.com>
 */
class UserAccessListener
{
    private $request;
    private $securityContext;

    public function __construct(SecurityContextInterface $securityContext, Request $request)
    {
        $this->request = $request;
        $this->securityContext=$securityContext;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        //if (!$this->isAccessAllowToUser()) {
            //$this->setAccessDenyResponse($event);
        //}
    }
    
    private function setAccessDenyResponse($event)
    {
        $token = $this->securityContext->getToken();
        if ($token == null && $this->request->isXmlHttpRequest()) {
            return new JsonResponse('Fail', 403);
        }
        
        $response = new Response('Access Deny', 200);
        
        $event->setResponse($response);
    }
    
    /**
     * @author Employee Id: 4116
     * Function created for User have Access of Action
     * @return ClassInstance
    */
    public function isAccessAllowToUser()
    {
        $_route=$this->request->attributes->get('_route');
        $project_setting=$this->request->get('project_setting');
        if (!empty($project_setting['user_access_routes']) &&  in_array($_route, $project_setting['user_access_routes'])) {
            return true;
        }
        if (!empty($project_setting['instance_access_routes']) &&  in_array($_route, $project_setting['instance_access_routes'])) {
            return false;
        }
        return true;
    }
}
