<?php
namespace OfficeBrain\Bundle\UserBundle\Manager\Extended;

use OfficeBrain\Bundle\UserBundle\Manager\AbstractManager\UserAbstract;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
use OfficeBrain\Bundle\UserBundle\Entity\User;
use OfficeBrain\Bundle\UserBundle\Form\UserType;
use OfficeBrain\Bundle\UserBundle\Entity\EmployeeInfo;

/**
 *
 * @author Employee Id: 4273
 * OB eCommerce Product - User
 * UserExtended Class Add to override the user process
 */

class UserExtended extends UserAbstract
{
    
    /**
     * @author Employee Id: 4273
     * Initialize the required variable on class load
     *
    */
   public function __construct($entityManager, $request, $session,$paginatorManager,$userApiManager,$serviceGroupManager,$jmsSerializer,$coreManager, $emailService, $router)
    {
        parent::__construct($entityManager, $request, $session,$paginatorManager,$userApiManager,$serviceGroupManager,$jmsSerializer,$coreManager, $emailService, $router);
    }
    /**
     *
     * @author Employee Id: 4273
     * OB eCommerce Product - getDistributors
     * Function created to get Distributors List
     */
    public function getDistributorsAPI($filters=array())
    {
    	return $this->entityManager->getRepository('OfficeBrainUserBundle:User')->getAllDistributorsIdNameOnly($filters);
    }

    /**
     * 
     * @author Employee Id: 4273
     * OB eCommerce Product - getDistributors
     * Function created to get Distributors List
     */
    public function getDistributors($filters=array())
    {
        return $this->entityManager->getRepository('OfficeBrainUserBundle:User')->getAllDistributors($filters);
    }
    
    
    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - add Employee
     * Function created to add employee
     */
    
    public function addEmployee($form, $fromerp=0)
    {
    	$companyId  = $this->request->get('companyId');
    	$companyObj = $this->entityManager->getRepository('OfficeBrainCompanyBundle:Company')->find($companyId);
    	$parentObj  = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->getUserById($companyObj->getCreatedUid());
    	$form->getData()['user']->setUserCompany($companyObj);
    	$form->getData()['user']->setParent($parentObj);
    	if (is_object($form->getData()['user']->getPhoto())) {
    		$photo=$form->getData()['user']->getPhoto()->getClientOriginalName();
    		$form->getData()['user']->setPhoto($photo);    		
    	}
    	$userType = $this->request->get('userType', 'supplier');
    	if ($companyId != '') {
    		$userType = $this->companyRepositoryManager->isBranch($companyId);
    		if ($userType!='employee' && $userType!='branchEmployee') {
    			$userType = $this->request->get('userType', 'supplier');
    		}
    	}
    	$userStatus = $this->addUser($form['user'],$userType,$companyId,$fromerp);
    	
    	if($userStatus && $userType == 'employee' || $userType == 'branchEmployee'){
    		$this->addEmployeeInfo($form['employeeinfo'],$userStatus);
    		return $userStatus;
    	}    	
    	return $userStatus;    	
    }
    


    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - Add EmployeeInfo
     * Function created for add user data to records
     */
    
    public function addEmployeeInfo($form,$userObj,$fromerp=0)
    {
        if ($fromerp == 1) {
            $userObj = $this->getUserById($this->request->get('userId'));
        }
    	$employeeInfoObj = new EmployeeInfo();
    	$employeeInfoData = $form->getData();
    	$employeeInfoObj->setPosition($employeeInfoData->getPosition());
    	$employeeInfoObj->setPrimaryJob($employeeInfoData->getPrimaryJob());
    	$employeeInfoObj->setFavoriteQuote($employeeInfoData->getFavoriteQuote());
    	$employeeInfoObj->setFact($employeeInfoData->getFact());
    	$employeeInfoObj->setFavoriteFood($employeeInfoData->getFavoriteFood());
    	$employeeInfoObj->setUser($userObj);
        $employeeInfoObj->setErpId($userObj->getErpId());
    
    	return  $this->entityManager->getRepository('OfficeBrainUserBundle:EmployeeInfo')->addEmployeeInfo($employeeInfoObj);
    	 
    }
    
    
    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - edit Employee
     * Function created to edit employee
     */
    
    public function editEmployee($form, $fromerp=0)
    {
    	$formObj = $form->getData()['user'];    	
    	$userArray = $this->getUserByIdArray($formObj->getId());
    	if($userArray && !empty($userArray)){ $userPhoto = $userArray['photo']; }else{ $userPhoto=null; }    	
    	if (is_object($formObj->getPhoto())) {
    		$photo=$formObj->getPhoto()->getClientOriginalName();
    		$formObj->setPhoto($photo);
    	}else{    		
    		$formObj->setPhoto($userPhoto);
    	}
    	
    	$userStatus = $this->editUser($form['user']);
    	if($userStatus && $fromerp == 0){
    		$employeeStatus = $this->editEmployeeInfo($form['employeeinfo'],$userStatus);
    		return $userStatus;
    	}    	 
    	return $userStatus;
    }
    
    
    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - Edit USer
     * Function created for edit user data to records
     */
    public function editEmployeeInfo($form,$userStatus,$fromerp=0)
    {
    	if ($form->isValid()) {    		
    		$employeeInfo = $form->getData();
            if ($fromerp == 1) {
                $userStatus = $this->getUserById($this->request->get('userId'));
            }
    		$employeeInfo->setUser($userStatus);
            $employeeInfo->setErpId($userStatus->getErpId());
    		$employeeInfoStatus = $this->entityManager->getRepository('OfficeBrainUserBundle:EmployeeInfo')->editEmployeeInfo($employeeInfo);
    		return $employeeInfoStatus;
    	} else {
    		return false;
    	}
    }
    
    
    
    
    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - getEmplyeeInfoById
     * Function created for getEmplyeeInfoById
     */
    
    public function getEmplyeeInfoById($userId)
    {
    	return  $this->entityManager->getRepository('OfficeBrainUserBundle:EmployeeInfo')->getEmplyeeInfoById($userId);
    }
    
    
    
    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - add Employee
     * Function created to add employee
     */
    
    public function addAdminUser($form)
    {
    	$loginUserType = $this->user->getUserType();    	
    	if ($loginUserType == 'employee' || $loginUserType == 'branchEmployee') {
    		$companyCreatedUid =    $this->user->getUserCompany()->getCreatedUid();
    		$parentObj = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->getUserById($companyCreatedUid);
    	} else {
    		$parentObj = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->getUserById($this->userId);
    	}
    	$form->getData()->setParent($parentObj);    	
    	$userType = $this->request->get('userType', 'supplier');    	
    	return  $this->addUser($form,$userType);
    }
    
    public function getTotalUserCount()
    {
    	return $this->userRepositoryManager->getTotalUserCount();
    }
    
   /*
    *  Emp ID: 4571 
    */
    public function findIsAdmin()
    {
		return $this->userRepositoryManager->isAdmin();

	}

	/*
	 *  Emp ID: 410175
	 */
	public function getUserByIdMobileApi()
	{
		return $this->userRepositoryManager->getUserByIdMobileApi($this->userId);	
	}
 	public function getObCustomerId($obCustomerId='')
    {
    	return $this->userRepositoryManager->existObCustomerIdUser($obCustomerId);
    }
    
    /**
     * @author Employee Id: 4493
     * OB eCommerce Product - getUserByIdArray
     * Function created to get User By Id
     * return array
     */
    public function getUserByIdArray($id)
    {
    	$user = $this->userRepositoryManager->getUserByIdArray($id);
    	return $user;
    }
    
    public function userListForExport(){
        return $this->userRepositoryManager->userListForExport();
    }
}
