<?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 ApiUserTypeEdit extends AbstractType
{
    protected $container;
    protected $form;

    /**
     *
     * @param ContainerInterface $container
     * @param $mode
     */
    public function __construct(ContainerInterface $container, $formFields=array(), $formType='')
    {
        $this->container = $container;
        $this->formFields = $formFields['fields'];
        $this->formvalidation = $formFields['validations'];
        $this->formtype = $formType;
        $this->master = $master = $this->container->get('office_brain_core_manager');
        
        
    }

    /**
     * @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';
    }
}
