<?php

class Sistema_Form_Preposto extends Agro_Form {
    private $modelCorretor = null;
    private $usuarioLogado = null;
    private $usuarioAgro = false;

	public function init() {
        $this->modelCorretor = new Sistema_Model_Corretores();
        $this->usuarioLogado = Zend_Auth::getInstance()->getIdentity();
        $modelUsuarios = new Sistema_Model_Usuarios();

        if ($modelUsuarios->isFuncionarioAgro($this->usuarioLogado->id)) {
            $this->usuarioAgro = true;
        }

		$this->addElement('hidden', 'id', array(
			'decorators' => $this->elementDecorator
		));

		$this->addElement('hidden', 'id_usuario', array(
			'decorators' => $this->elementDecorator
		));

		$this->addElement('hidden', 'tp_usuario', array(
			'decorators' => $this->elementDecorator,
			'value' => 'P'
		));

        $this->addElement('hidden', 'tipo_usuario_logado', array(
          'decorators' => $this->elementDecorator,
          'value' => $this->usuarioLogado->tp_usuario
        ));

		$Roles = array(1 => 'I - Solicitações e contatos via chamados',
					   2 => 'II - Solicitações de Cancelamentos',
					   3 => 'III - Solicitações de Endossos',
					   4 => 'IV - Avisos, comunicações e solicitações de sinistros');

		$this->addElement('select', 'ds_excecoes', array(
			'MultiOptions' => $Roles,
			'decorators' => $this->elementDecorator,
			'label' => 'Restrições de Perfil',
			'multiple' => true,
			'class' => 'multiple',
			'isArray' => true
		));

		$this->addElement('select', 'id_corretor', array(
			'MultiOptions' => $this->modelCorretor->fetchPairs('id', 'ds_nome_fantasia'),
			'decorators' => $this->elementDecorator,
			'label' => 'Corretor',
			'required' => true
		));

		$this->addElement('text', 'ds_nome_contato', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Pessoa Contato',
			'maxlength' => 50,
			'size' => 40
		));

		$this->addElement('select', 'tp_pessoa', array(
			'MultiOptions' => array('J' => 'JURÍDICA', 'F' => 'FÍSICA'),
			'decorators' => $this->elementDecorator,
			'label' => 'Pessoa Tipo'
		));

		$this->addElement('text', 'cpf_cnpj', array (
			'decorators' => $this->elementDecorator,
			'label' => 'CPF/CNPJ',
			'class' => 'cpf_cnpj',
			'required' => false,
			'size' => 20
		));

		$this->addElement('text', 'ds_nome_preposto', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Nome',
			'class' => 'upper',
			'required' => true,
			'size' => 100
		));

		$this->addElement('text', 'ds_nome_responsavel', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Nome do Responsável',
			'size' => 40
		));

		$this->addElement('text', 'ds_email', array(
			//'validators' => array(array('validator'=> new Zend_Validate_EmailAddress())),
			'decorators' => $this->elementDecorator,
			'validator' => 'EmailAddress',
			'label' => 'E-mail',
			'class' => 'lower',
			'size' => 40
		));

		$this->addElement('text', 'ds_email_2', array(
			//'validators' => array(array('validator'=> new Zend_Validate_EmailAddress())),
			'decorators' => $this->elementDecorator,
			'validator' => 'EmailAddress',
			'label' => 'E-mail 2',
			'class' => 'lower',
			'size' => 40
		));

		$this->addElement('textarea', 'ds_observacao', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Observações',
			'cols' => 50,
			'rows' => 5,
		));

		$preposto = new Sistema_Model_Prepostos();
		$this->addElement('select', 'id_prepostos_frase_declaracao', array(
			'MultiOptions' => $preposto->getPairsFraseDeclaracao(),
			'decorators' => $this->elementDecorator,
			'label' => 'Frase Declaração'
		));

		$this->addElement('text', 'ds_vinculo_declaraco', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Vínculo Declaração',
			'size' => 40,
		));

		$this->addElement('text', 'ds_nome_usuario', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Login',
			'maxlength' => 100,
			'class' => 'lower',
			'size' => 40
		));

		$this->addElement('text', 'ds_senha', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Senha',
			'required' => false,
			'size' => 15
		));

		$this->addElement('text', 'ds_senha2', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Confirmar Senha',
			'required' => false,
			'size' => 15
		));

		$this->addElement('checkbox', 'fl_autorizacao_cancelamento', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Autorização para Cancelamento de Proposta'
		));

		$this->addElement('checkbox', 'fl_autorizacao_endosso', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Autorização para Solicitação de Endosso'
		));

		$Empresa = new Sistema_Model_Empresas();
		$this->addElement('select', 'id_comercial', array(
			'decorators' => $this->elementDecorator,
			'MultiOptions' => $Empresa->getComercial(true,false),
			'required' => true,
			'label' => 'Comercial'
		));

        $this->addElement('text', 'ds_nome_usuario_alteracao', array(
            'decorators' => $this->elementDecorator,
            'label' => 'Usuário da Alteração',
            'required' => false,
            'readonly' => true,
            'size' => 25
        ));

        $this->addElement('text', 'ds_nome_usuario_criacao', array(
            'decorators' => $this->elementDecorator,
            'label' => 'Usuário da Criação',
            'required' => false,
            'readonly' => true,
            'size' => 25
        ));

        $this->addElement('text', 'dt_alteracao', array(
            'decorators' => $this->elementDecorator,
            'label' => 'Data de Alteração',
            'required' => false,
            'readonly' => true,
            'size' => 25
        ));

        $this->addElement('text', 'dt_criacao', array(
            'decorators' => $this->elementDecorator,
            'label' => 'Data de Criação',
            'required' => false,
            'readonly' => true,
            'size' => 25
        ));

        $this->addElement('hidden', 'inicial_usuario', array(
          'decorators' => $this->elementDecorator,
        ));
		
		$this->addElement('hidden', 'ds_nome_preposto_original', array(
			'decorators' => $this->elementDecorator
		));

        $this->addElement('hidden', 'complemento_usuario', array(
          'decorators' => $this->elementDecorator,
        ));

        $this->addElement('checkbox', 'fl_permite_alterar_comissao', array(
          'decorators' => $this->elementDecorator,
          'label' => 'Login Autorizado a Alterar Comissão',
          'value' => false,
        ));

        $this->addElement('hidden', 'usuario_agro', array(
          'decorators' => $this->elementDecorator,
          'value' => $this->usuarioAgro,
        ));
	}

	public function populate(array $values) {
		// Preenche os municipios e o estado
		if ($values['id_municipio']) {
			$Municipios = new Sistema_Model_Municipios();
			$Estados = new Sistema_Model_Estados();

			$Municipio = $Municipios->find($values['id_municipio'])->current();
			$Estado = $Estados->find($Municipio->id_estado)->current();

			$values['id_estado'] = $Municipio->id_estado;
			$values['id_municipio'] = $Municipio->id;
			$values['ds_nome_municipio'] = $Municipio->ds_nome_municipio;
			$values['ds_nome_estado'] = $Estado->ds_sigla;
		}

        $Usuarios = new Sistema_Model_Usuarios();
		if ($values['id_usuario']) {
			$Usuario = $Usuarios->find($values['id_usuario'])->current();

			$values['ds_nome_usuario'] = $Usuario->ds_nome_usuario;
			$values['inicial_usuario'] = substr($Usuario->ds_nome_usuario, 0, strpos($Usuario->ds_nome_usuario, '.'));
			$values['complemento_usuario'] = substr($Usuario->ds_nome_usuario, strpos($Usuario->ds_nome_usuario, '.') + 1);
			$values['ds_senha2'] = $Usuario->ds_senha;
			$values['ds_senha'] = $Usuario->ds_senha;
		}

		if ($values['id']) {
            $UsuarioCriacao = $Usuarios->find($values['id_usuario_criacao'])->current();
            $UsuarioAlteracao = $Usuarios->find($values['id_usuario_alteracao'])->current();

            $values['dt_criacao'] = Agro_Util::formatDate($values['dt_criacao'], Zend_Date::DATETIME);
            $values['dt_alteracao'] = Agro_Util::formatDate($values['dt_alteracao'], Zend_Date::DATETIME);
            $values['ds_nome_usuario_criacao'] = $UsuarioCriacao->ds_nome_usuario;
            $values['ds_nome_usuario_alteracao'] = $UsuarioAlteracao->ds_nome_usuario;
        }

        if (!empty($values['id_corretor'])) {
		    $dadosCorretor = $this->getDadosCorretor($values['id_corretor']);

		    if (empty($values['id_comercial'])) {
                $values['id_comercial'] = $dadosCorretor['id_comercial'];
            }

            if (empty($values['inicial_usuario'])) {
                $values['inicial_usuario'] = $this->tratamentoInicialUsuario($dadosCorretor['ds_nome_usuario']);
            }
        }

		$ex = explode(',', trim($values['ds_excecoes']));
		$values['ds_excecoes'] = $ex;
		$values['ds_senha2'] = '';
		$values['ds_senha'] = '';

		if ($this->usuarioLogado->tp_usuario === Sistema_Model_Usuarios::TIPO_USUARIO_CORRETOR) {
		    $corretor = $this->getCorretorByUsuarioLogado();

            $values['id_corretor'] = $corretor['id'];
            $values['id_comercial'] = !empty($values['id_comercial']) ? $values['id_comercial'] : $corretor['id_comercial'];
            $values['inicial_usuario'] = $this->tratamentoInicialUsuario($corretor['ds_nome_usuario']);

            if (empty($values['ds_nome_preposto']) && !empty($corretor['ds_nome_abreviado']) && (empty($values['action']) || $values['action'] !== 'index')) {
                $values['ds_nome_preposto'] = "{$corretor['ds_nome_abreviado']} - ";
            }
        }

        $values['usuario_agro'] = $this->usuarioAgro;

		parent::populate($values);
	}

	private function getDadosCorretor(int $idCorretor)
    {
        return $this->modelCorretor->getUsuarioCriacaoAlteracao("c.id = {$idCorretor}")->toArray();
    }

	private function getCorretorByUsuarioLogado()
    {
        return $this->modelCorretor->getUsuarioCriacaoAlteracao("c.id_usuario = {$this->usuarioLogado->id}")->toArray();
    }

    private function tratamentoInicialUsuario(string $nomeUsuario)
    {
        return preg_match('/\./', $nomeUsuario) ? substr($nomeUsuario, 0, strpos($nomeUsuario, '.')) : $nomeUsuario;
    }
}
