<?php

namespace OfficeBrain\Bundle\UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\CssSelector\XPath\Translator;
use Symfony\Component\Validator\ExecutionContextInterface;
use Symfony\Component\Form\FormTypeInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormError;
use Doctrine\ORM\EntityRepository;

class ApiUserType extends AbstractType {
	protected $container;
	protected $form;
	
	/**
	 *
	 * @param ContainerInterface $container        	
	 * @param
	 *        	$mode
	 */
	public function __construct(ContainerInterface $container, $formFields = array(), $formType = '') {
		$this->coreManger= $coreManger;
		$this->formFields = $formFields['fields'];
		$this->formvalidation = $formFields['validations'];
		$this->formtype = $formType;
	}
	
	/**
	 *
	 * @param FormBuilderInterface $builder        	
	 * @param array $options        	
	 */
	public function buildForm(FormBuilderInterface $builder, array $options) {
		
		$gender = array (
				'male' => 'user.gender.male',
				'female' => 'user.gender.female' 
		);
		
		$country = array ();
		$state = array ();
		$city = array ();
		
		
		$constraints = array (
				'username' => array (
						new Assert\Length ( array (
								'min' => 5,
								'minMessage' => 'user.username.min' 
						) ),
						new Assert\Regex ( array (
								'pattern' => '/^([a-zA-Z0-9_]{5,25})$/',
								'message' => 'user.username.invalid' 
						) ) 
				),
				'email' => array (
						new Assert\Regex ( array (
								'pattern' => '/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/',
								'message' => 'user.email.invalid' 
						) ) 
				),
				'password' => array (
						new Assert\Length ( array (
								'min' => 5,
								'minMessage' => 'user.password.min' 
						) ),
						new Assert\Regex ( array (
								'pattern' => '/^([a-zA-Z0-9@*#_!]{5,25})$/',
								'message' => 'user.password.invalid' 
						) ) 
				),
				'gender' => array (),
				'firstName' => array (),
				'middleName' => array (),
				'lastName' => array (),
				'userCompany' => array (),
				'street1' => array (),
				'street2' => array (),
				'countryId' => array (),
				'stateId' => array (),
				'cityId' => array (),
				'zipcode' => array (),
				'phone' => array (),
				'mobile' => array (),
				'fax' => array (),
				'website' => array (
						new Assert\Regex ( array (
								'pattern' => "/^(https?:\/\/|http?:\/\/|HTTPS?:\/\/|HTTP?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w \.-]*)*\/?$/",
								'message' => 'user.website.invalid' 
						) ) 
				),
				'locatedDistributorId' => array (),
				'membershipNumber1' => array (),
				'membershipNumber2' => array (),
				'membershipNumber3' => array (),
				'membershipNumber4' => array (),
				'membershipNumber5' => array (),
				'membershipNumber6' => array (),
				'obCustomerId' => array (),
				'jobTitle' => array (),
				'isCompany' => array (),
				'isIndividual' => array (),
				'companyNumber' => array (),
				'companyName' => array (),
				'newslettersUnsubscription' => array (),
				'photo' => array (),
				'extension' => array () 
		);
		
			
		
			$builder->add ( 'loginUsername', 'text', array (
					'constraints' => $constraints ['username'] 
			) );
			$builder->add ( 'email', 'text', array (
					'constraints' => $constraints ['email'] 
			) );
		
			$builder->add ( 'password', 'repeated', array (
					'type' => 'password',
					'constraints' => $constraints ['password'],
					'invalid_message' => 'user.password.mismatch' 
			) );
			$builder->add ( 'gender', 'choice', array (
					'choices' => $gender,
					'constraints' => $constraints ['gender'],
					'description'=>'male/female'
			) );
			$builder->add ( 'firstName', 'text', array (
					'constraints' => $constraints ['firstName'] 
			) );
			$builder->add ( 'middleName', 'text', array (
					'constraints' => $constraints ['middleName'] 
			) );
		
			$builder->add ( 'lastName', 'text', array (
					'constraints' => $constraints ['lastName'] 
			) );
			$builder->add ( 'street1', 'text', array (
					'constraints' => $constraints ['street1'] 
			) );
			$builder->add ( 'street2', 'text', array (
					'constraints' => $constraints ['street2'] 
			) );
			$builder->add ( 'countryId', 'choice', array (
					'choices' => $country,
					'constraints' => $constraints ['countryId'] 
			) );
			$builder->add ( 'stateId', 'choice', array (
					'choices' => $state,
					'constraints' => $constraints ['stateId'] 
			) );
			$builder->add ( 'cityId', 'choice', array (
					'choices' => $city,
					'constraints' => $constraints ['cityId'] 
			) );
			$builder->add ( 'zipcode', 'text', array (
					'constraints' => $constraints ['zipcode'] 
			) );
			$builder->add ( 'phone', 'text', array (
					'constraints' => $constraints ['phone'],
					'description'=>''
			) );
			$builder->add ( 'mobile', 'text', array (
					'constraints' => $constraints ['mobile'],'description'=>'' 
			) );
			$builder->add ( 'fax', 'text', array (
					'constraints' => $constraints ['fax'] ,'description'=>''
			) );
			$builder->add ( 'website', 'text', array (
					'constraints' => $constraints ['website'] 
			) );
			$builder->add ( 'locatedDistributorId', 'hidden', array (
					'constraints' => $constraints ['locatedDistributorId'],
					'attr' => array (
							'class' => 'js-locate-distributor-value' 
					) 
			) );
			$builder->add ( 'membershipNumber1', 'text', array (
					'constraints' => $constraints ['membershipNumber1'] 
			) );
			$builder->add ( 'membershipNumber2', 'text', array (
					'constraints' => $constraints ['membershipNumber2'] 
			) );
			$builder->add ( 'membershipNumber3', 'text', array (
					'constraints' => $constraints ['membershipNumber3'] 
			) );
			$builder->add ( 'membershipNumber4', 'text', array (
					'constraints' => $constraints ['membershipNumber4'] 
			) );
			$builder->add ( 'membershipNumber5', 'text', array (
					'constraints' => $constraints ['membershipNumber5'] 
			) );
			$builder->add ( 'membershipNumber6', 'text', array (
					'constraints' => $constraints ['membershipNumber6'] 
			) );
			$builder->add ( 'obCustomerId', 'text', array (
					'constraints' => $constraints ['obCustomerId'] 
			) );
			$builder->add ( 'jobTitle', 'text', array (
					'constraints' => $constraints ['jobTitle'] 
			) );
			
			$builder->add ( 'isCompany', 'hidden', array (
					'constraints' => $constraints ['isCompany'],
					
			) );
			
			$builder->add ( 'isIndividual', 'hidden', array (
					'constraints' => $constraints ['isIndividual'],
					
			) );
		$builder->add ( 'companyNumber', 'text', array (
					'constraints' => $constraints ['companyNumber'] 
			) );
			$builder->add ( 'companyName', 'text', array (
					'constraints' => $constraints ['companyName'] 
			) );
		
			$builder->add ( 'userCompany', 'text', array (										
					'constraints' => $constraints ['userCompany'],
			) );
			$builder->add ( 'newslettersUnsubscription', 'checkbox', array (
					'constraints' => $constraints ['newslettersUnsubscription'],
					'description'=>'Set 1 to subscribe newsletter'
			) );
		$builder->add ( 'photo', 'file', array (
					'data_class' => null,
					'constraints' => $constraints ['photo'] 
			) );
			$builder->add ( 'extension', 'text', array (
					'constraints' => $constraints ['extension'] 
			) );
				
		//$builder->add ( 'erpId', 'hidden' )
		//->add ( 'status', 'hidden' );		
	}

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'OfficeBrain\Bundle\UserBundle\Entity\User',
        		'csrf_protection' => true,
        			'csrf_field_name' => '_token',
        			// a unique key to help generate the secret token
        			'intention'       => 'officebrain_bundle_userbundle_user',
        ));
              
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'ob_user';
    }
}
