<?php
class Sistema_PrepostoController extends Agro_Controller_Action {
	public $_backAfterSave = 0;

	public function init() {
		$this->view->title = 'Sistema » Cadastro » Sublogin';
	}

	public function setBack() {
		$this->view->back = '/sistema/preposto';

        if (Zend_Auth::getInstance()->getIdentity()->tp_usuario === Sistema_Model_Usuarios::TIPO_USUARIO_PREPOSTO) {
            $this->view->back = '';
        }
	}

	public function getModel() {
		return new Sistema_Model_Prepostos();
	}

	public function getForm() {
		$Form = new Sistema_Form_Preposto();
		$Form->populate($this->getRequest()->getParams());
		return $Form;
	}

	public function viewAction()
    {
		parent::viewAction();

		$model = $this->getModel();
        $id = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
            ? 0
            : (int)$this->getRequest()->getParam('id');

		$this->view->data['corretor'] = $model->getCorretor($id);
		$this->view->data['telefones'] = $model->getTelefones($id);
		$this->view->data['endereco'] = $model->getEndereco($id);
	}

	public function formAction() {
	    $usuarioLogado = Zend_Auth::getInstance()->getIdentity();
        $usuarioAgro = (new Sistema_Model_Usuarios())->isFuncionarioAgro($usuarioLogado->id);

        if (!$usuarioAgro && $usuarioLogado->tp_usuario !== Sistema_Model_Usuarios::TIPO_USUARIO_CORRETOR) {
            Zend_Layout::getMvcInstance()->getView()->title = 'Erro de Permissão';
            Zend_Layout::getMvcInstance()->getView()->error = 'Você não tem permissão para acessar esta tela. Contate o administrador.';

            $this->view->setScriptPath(APPLICATION_PATH . '/modules/default/views/scripts/');

            $this->getRequest()->setModuleName('default');
            $this->getRequest()->setControllerName('error');
            $this->getRequest()->setActionName('privileges');

            return false;
        }

		//em função da tarefa 01721, inicialmente salva o perfil padrão do corretor.
		//para depois cadastrar as exceções (Model linha 65)
		$this->getRequest()->setParam('id_role', 6);

        $parametros = $this->getRequest()->getParams();
        if (
          isset($parametros['salvar'])
          && empty($parametros['ds_nome_usuario'])
          && !empty($parametros['inicial_usuario'])
          && !empty($parametros['complemento_usuario'])
        ) {
            $this->getRequest()->setParam('ds_nome_usuario', "{$parametros['inicial_usuario']}.{$parametros['complemento_usuario']}");
        }

        if (!empty(trim($this->getRequest()->getParam('ds_senha')))) {
            $this->getRequest()->setParam('validarSenha', true);
        }

		parent::formAction();
        $this->setBack();
	}

	public function getFilter() {
		$where = array();

		if ($this->getRequest()->getParam('ds_nome_preposto')) {
			$where[] = array(
				'field' => 'ds_nome_preposto',
				'operator' => 'ilike',
				'value' => '%'.$this->getRequest()->getParam('ds_nome_preposto').'%'
			);
		}

		if ($this->getRequest()->getParam('id_corretor')) {
			$where[] = array(
				'field' => 'id_corretor',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_corretor')
			);
		}

		if ($this->getRequest()->getParam('fl_ativo')) {
			$where[] = array (
				'field' => 'p.fl_ativo',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('fl_ativo')
			);
		}

		return $where;
	}

	public function listprepostoAction(){

	    $this->_paginator = false;
	    parent::listAction();

	}

	public function activeAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$Prepostos = new Sistema_Model_Prepostos();
		$Usuarios = new Sistema_Model_Usuarios();

		$Preposto = $Prepostos->find($this->getRequest()->getParam('id'))->current();
		$Usuario = $Usuarios->find($Preposto->id_usuario)->current();

		$Preposto->fl_ativo = ($Preposto->fl_ativo ? 0 : 1);
		$Usuario->fl_ativo = $Preposto->fl_ativo;

		$img = ($Usuario->fl_ativo ? 'active.png' : 'inactive.png');

		if ($Usuario->save() && $Preposto->save()) {
			$result['ativo'] = $Preposto->fl_ativo;

			// adiciona o cara nos grupos de capacidade qndo é ativado.
			$CapacidadeUsuario = new Produto_Model_ValidacoesCapacidadeUsuarios();
			$CapacidadeUsuario->addCorretorPreposto($Preposto->id_usuario);

			if ($Preposto->fl_ativo) {
                $this->validarCadastroAnual($Preposto->id);
            }
				
			$this->getResponse()->setBody(Zend_Json::encode($result));
		} else {
			$this->view->message(MSG_ERROR, 'error');
		}
	}

	public function getprepostosAction() {
		
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		if ($this->getRequest()->getParam('id')) {
			$Prepostos = new Sistema_Model_Prepostos();

			if ($this->getRequest()->getParam('user')) {
				$prepostos = $Prepostos->getComboUsuario($this->getRequest()->getParam('id'));
			} else {
				$prepostos = $Prepostos->getCombo($this->getRequest()->getParam('id'));
			}

			$opt = array();
			if (is_array($prepostos)) {
				foreach ($prepostos as $key => $text) {
					$opt[] = array('id'=>$key,'label'=>$text);
				}
			}

			$Json = new Zend_Json();
			$this->getResponse()->setBody($Json->encode($opt));
		}
	}

	/**
	 * Habilitações do corretor para o novo preposto.
	 * @param Integer $id
	 */
	public function afterSave($Preposto) {
		
		if ($Preposto->id) {
			$Model = $this->getModel();
			$Corretor = $Model->getCorretorByUsuario($Preposto->id_usuario);

			$Habilitacoes = new Produto_Model_Habilitacoes();
			$Habilitacoes->replicaHabilitacoes($Preposto->id_usuario,$Corretor->id_usuario);

			$this->validarCadastroAnual($Preposto->id);
		}
	}

    public function beforeSave() {
        $params = $this->getRequest()->getPost();

        if (strlen($params['ds_senha']) < 12 || strlen($params['ds_senha2']) < 12) {
			$this->view->showMessage('Campos senha devem ter no mínimo 12 caracteres!', 'error');
			return false;
		}

        if ($params['ds_senha'] !== $params['ds_senha2']) {
            throw new \Exception('Senha informada nos campos devem ser iguais.', 403);
        }

        if (APPLICATION_ENV === 'production' && !empty($params['ds_senha'])) {
            $agroSenha = new Agro_Senha();
            $senhaValida = $agroSenha->validarSenha($params['ds_senha'], $params['ds_senha2']);

            if (!$senhaValida) {
                throw new \Exception($agroSenha->retornarMensagemErros(), 403);
            }
        }

        if (!isset($params['ds_nome_usuario'])) {
            $params['ds_nome_usuario'] = "{$params['inicial_usuario']}.{$params['complemento_usuario']}";
        }

        $this->validarUsuario($params);
    }

    private function validarCadastroAnual(int $idPreposto)
    {
        $modelPrepostoCadastroAnual = new Sistema_Model_PrepostosPeriodoCadastroAnual();
        $modelPrepostoCadastroAnual->validarCadastro($idPreposto);
    }

    public function indexAction()
    {
        $this->validarUsuarioLogado();
        parent::indexAction();
    }

    private function validarUsuarioLogado()
    {
        $usuarioLogado = Zend_Auth::getInstance()->getIdentity();

        if ($usuarioLogado->tp_usuario === Sistema_Model_Usuarios::TIPO_USUARIO_PREPOSTO) {
            $modelPrepostos = new Sistema_Model_Prepostos();
            $rowPreposto = $modelPrepostos->findByUser($usuarioLogado->id);

            if (!empty($rowPreposto)) {
                $this->_redirect("/sistema/preposto/form/id/{$rowPreposto['id']}");
            }
        }
    }

    public function getprepostoscorretoresAction()
    {
        $this->isAjax();
        $retorno = [];
        $parametros = $this->getRequest()->getParams();

        if ($parametros['filtroPesquisa'] === 'false') {
            $row = (new Sistema_Model_Corretores())->findByUser($parametros['corretores'][0]);
            $retorno[] = ['value' => $row['id_usuario'], 'text' => $row['ds_nome_corretor'], 'id_corretor' => $row['id']];
        }

        $retornoSublogins = $this->getModel()->getComboUsuarioByCorretores($parametros['corretores']);

        foreach ($retornoSublogins as $idUsuario => $dados) {
            $retorno[] = ['value' => $idUsuario, 'text' => $dados['nome'], 'id_corretor' => $dados['id_corretor']];
        }

        $this->getResponse()->setBody(Zend_Json::encode($retorno));
    }
}
