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

use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Translation\Translator;
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 Symfony\Component\HttpFoundation\JsonResponse;
use OfficeBrain\Bundle\UserBundle\Entity\ContactBook;

/**
 *
 * @author Employee Id: 4273
 * OB eCommerce Product - SignUp
 * SignUpAbstract Class Add to define the common function and logic for sign up process
 */

abstract class SignUpAbstract
{
    private $entityManager;
    protected $session;
    protected $request;
    protected $emailService;

    /**
     * @author Employee Id: 4273
     * Initialize the required variable on class load
     *
     */
    public function __construct($entityManager, $request, $session, $emailService, $router)
    {
        $this->entityManager = $entityManager;
        $this->session = $session;
        $this->request = $request;
        $this->emailService = $emailService;
        $this->projectSetting = $this->request->get('project_setting');
        $this->projectUserSetting = $this->request->get('project_user_setting');
        $this->user = $this->projectUserSetting['user_data'];
        $this->signUpConfigrations = $this->projectSetting['configuration_rule']['user']['sign_up'];
        $this->entityManager->getRepository('OfficeBrainUserBundle:SignUpForm')->setProjectSetting($this->projectSetting);
        $this->entityManager->getRepository('OfficeBrainUserBundle:User')->setProjectSetting($this->projectSetting);
        $this->entityManager->getRepository('OfficeBrainUserBundle:User')->setProjectUserSetting($this->projectUserSetting);

        $this->entityManager->getRepository('OfficeBrainUserBundle:ContactBook')->setProjectSetting($this->projectSetting);
        $this->entityManager->getRepository('OfficeBrainUserBundle:ContactBook')->setProjectUserSetting($this->projectUserSetting);
        $this->instanceType = $this->projectSetting['instance_type'];
        $this->site_owner_id = $this->projectSetting['site_owner_id'];

    }

    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - Signup
     * Function created for get fields for sign up form
     */
    public function getsignUpFormData($userType)
    {
        if($userType == '' || $userType == null){ $userType = 'end_user'; }        
        $signUpForm = $this->entityManager->getRepository('OfficeBrainUserBundle:SignUpForm')->getSignUpForm($userType);
        return $signUpForm;
    }
    
    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - Signup
     * Function created for get fields for sign up form
     */
    public function getsignUpFormDataArrayFormat($userType)
    {
    	if($userType == '' || $userType == null){ $userType = 'end_user'; }
    	$signUpForm = $this->entityManager->getRepository('OfficeBrainUserBundle:SignUpForm')->getSignUpFormArrayFormat($userType);
    	return $signUpForm;
    }
	
	/**
     * @author Employee Id: 4273
     * OB eCommerce Product - getUserByEmail
     * Function created to get User By Email
     */
    public function getUserByEmail($email)
    {
        $user = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->getUserByEmail($email);
        return $user;
    }
    
    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - Signup
     * Function created for add user data to records
    */ 
    public function registerUser($form)
    {   
    	if ($form->isValid()) {
    		if( isset($_POST['membership_id']) && $_POST['membership_id'] != '' ) {
    			if($this->user && $this->user->getId() && $this->user->getId() > 0){
    				$userId = $this->user->getId();
    			}else{
    				$userId = $this->instanceType == "distributor" ? $this->site_owner_id : $this->projectSetting['admin_id'];
    			}
    			$userType = $this->request->get('userType', 'supplier');
    			$form->getData()->setParent($this->entityManager->getRepository('OfficeBrainUserBundle:User')->getUserById($userId));
    			$userStatus = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->addUser($form, $userType, $userId);
    			return $userStatus;
    		} else {
    			return false;
    		}
        }else{
            return false;
        }
    }


    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - Signup
     * Function created for add Address
     */
    public function addAddress($user, $addressType)
    {
        $contactBook = new ContactBook();
        $addressTypeObj = $this->entityManager->getRepository('OfficeBrainCoreBundle:AddressType')->findOneBy(array('id'=>$addressType));
        $contactBook->setUser($user);
        $contactBook->setName($user->getFirstName().' '.$user->getLastName());
        $contactBook->setAdressType($addressTypeObj);
        $contactBook->setEmail($user->getEmail());

        $contactBook->setStreet1($user->getStreet1());
        $contactBook->setStreet2($user->getStreet2());
        $contactBook->setCountryId($user->getCountryId());
        $contactBook->setCountryName($user->getCountryName());
        $contactBook->setStateId($user->getStateId());
        $contactBook->setStateName($user->getStateName());
        $contactBook->setCityId($user->getCityId());
        $contactBook->setCityName($user->getCityName());
        $contactBook->setZipcode($user->getZipcode());
        $contactBook->setIsAddress('1');
        $userId = $user->getId();
        $isDefaultAddress = $this->entityManager->getRepository('OfficeBrainUserBundle:ContactBook')->isDefaultAddress($userId, $addressType, '1');
        $isDefault = count($isDefaultAddress);
        if ($isDefault == 0) {
        	$contactBook->setIsDefault('1');
        } else {
        	$contactBook->setIsDefault('0');
        } 
        /*if(!empty($addressType['default']))
            $contactBook->setIsDefault('1');
        else
            $contactBook->setIsDefault('0');
		*/
        $contactBook->setIsOffice('1');
        $contactBook->setExtension($user->getExtension());
        $contactBook->setPhone($user->getPhone());
        $contactBook->setMobile($user->getMobile());
        $contactBook->setFax($user->getFax());
        $contactBook->setWebsite($user->getWebsite());
        
        $status = $this->entityManager->getRepository('OfficeBrainUserBundle:ContactBook')->addContactBook($contactBook,'adminSide',1);

        return $status;
    }


    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - Signup
     * Function created for add user data to records
     */
    public function approveUserByConfirmationToken($user)
    {
        $userStatus = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->approveUserByConfirmationToken($user);
        return $userStatus;
    }

    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - sendApprovalLink
     * Function created for sending approval link
     */
    public function sendApprovalLink()
    {
    }



    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - generateApprovalLink
     * Function created for generating approval link for approving user
     */
    private function generateApprovalLink()
    {
    }

    /**
     * @author Employee Id: 4273
     * OB eCommerce Product - setMongoDbObject
     * Function created for sending user object to mongoDB que
     */
    private function setMongoDbObject()
    {
    }
    
    /**
     * @author Employee Id: 4160
     * OB eCommerce Product - getAddressBookofUser
     * Function created to get Address book of User
     */
    public function getAddressBookofUser($userId, $addressType)
    {
        return $this->entityManager->getRepository('OfficeBrainUserBundle:ContactBook')->getAddressBookofUser($userId, $addressType);
    }
}
