<?php
namespace OfficeBrain\Bundle\AccessManagementBundle\Manager\Service;

use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\Translation\Translator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use OfficeBrain\Bundle\AccessManagementBundle\Manager\Extended as AccessManagementManager;

/**
 * @author OfficeBrain 4116 <info@officebrain.com>
 *
 * Description : This will manage user level Access.
 *
 **/
class AccessManagementService
{
    /**
     * @author Employee Id: 4116
     * OB eCommerce User Access
     * Story : #
     * Issue : #
     * Task : #
     * Completed
     * Function created for decied the name of extented class
     * @param integer $userId
     * @return number
    */
    public static function initFactory($entityManager, $request, $session)
    {
        $classInstance = new AccessManagementManager\AccessManagementExtended($entityManager, $request, $session);
        
        return $classInstance;
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce User Access
     * Story : #
     * Issue : #
     * Task : #
     * Completed
     * Function created for decied the name of extented class
     * @param integer $userId
     * @return number
    */
    public static function initSiteFactory($entityManager, $request, $session, $sitemapManager, $formManager)
    {
        $classInstance = new AccessManagementManager\SiteAccessManagementExtended($entityManager, $request, $session, $sitemapManager, $formManager);
        return $classInstance;
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce User Access
     * Story : #
     * Issue : #
     * Task : #
     * Completed
     * Function created for decied the name of extented class
     * @param integer $userId
     * @return number
    */
    public static function initSubSiteFactory($entityManager, $request, $session, $sitemapManager, $formManager)
    {
        $classInstance = new AccessManagementManager\SubSiteAccessManagementExtended($entityManager, $request, $session, $sitemapManager, $formManager);
        
        return $classInstance;
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce User Access
     * Story : #
     * Issue : #
     * Task : #
     * Completed
     * Function created for decied the name of extented class
     * @param integer $userId
     * @return number
    */
    public static function initSiteUserFactory($entityManager, $request, $session, $userRepo, $formManager)
    {
        $classInstance = new AccessManagementManager\SiteUserAccessManagementExtended($entityManager, $request, $session, $userRepo, $formManager);
        
        return $classInstance;
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce Product - Assess Management
     * Function created for get all User Access Routes
     * @return Array
    */
    
    public static function getUserAccessRoutes($entityManager, $request, $session, $userObj, $instanceId)
    {
        $classInstance = new AccessManagementManager\AccessManagementExtended($entityManager, $request, $session);
        
        return $classInstance->getUserAccessRoutes($userObj, $instanceId);
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce Product - Assess Management
     * Function created for get all Instance Wise Access Routes
     * @return Array
    */
    
    public static function getInstanceAccessRoutes($entityManager, $request, $session, $instanceId)
    {
        $classInstance = new AccessManagementManager\AccessManagementExtended($entityManager, $request, $session);
        
        return $classInstance->getInstanceAccessRoutes($instanceId);
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce Product - Assess Management
     * Function created for get Project wise set Access Hierarchy
     * @return Array
    */
    public static function getProjectMasterAccessWiseUserAccess($entityManager, $request, $session, $userObj, $instanceId)
    {
        $classInstance = new AccessManagementManager\AccessManagementExtended($entityManager, $request, $session);
        
        return $classInstance->getProjectMasterAccessWiseUserAccess($userObj, $instanceId);
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce Product - Assess Management
     * Function created for get Project wise set Access Hierarchy
     * @return Array
    */
    public static function getProjectMasterConfigurations($entityManager, $request, $session)
    {
        $classInstance = new AccessManagementManager\AccessManagementExtended($entityManager, $request, $session);
        
        return $classInstance->getProjectMasterConfigurations();
    }
    
    /**
     * @author Employee Id: 4116
     * OB eCommerce Product - Assess Management
     * Function created for get Project wise set Access Hierarchy
     * @return Array
    */
    public static function getInstanceConfigurations($entityManager, $request, $session)
    {
        $classInstance = new AccessManagementManager\AccessManagementExtended($entityManager, $request, $session);
        
        return $classInstance->getInatanceConfigurations();
    }
}
