<?php

class Sinistro2_Form_AgendamentoVistoria extends Agro_Form
{
    protected $_id_processo;
    protected $_id_vistoria;
    protected $idEmpresa;
    protected $idTipoVistoria;

    public function __construct(array $params = array(), $options = null)
    {
        $this->_id_processo = $params['id_processo'];
        $this->_id_vistoria = $params['id_vistoria'];
        $this->idEmpresa = $params['id_empresa'] ?? null;
        $this->idTipoVistoria = $params['id_tipo'] ?? null;

        parent::__construct($options);
    }

    public function init()
    {
        $this->setMethod('post');
        $this->setAttrib('id', 'form-agendamento');
        $this->setAttrib('action', '/sinistro2/agendamentovistoria/form');

        $this->addElement('hidden', 'id_agendamento', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'id_vistoria', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'id_processo', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'id_proposta', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'id_cobertura', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'id_tipo', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'fl_success', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'mensagem', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('hidden', 'id_empresa', array(
            'decorators' => array('ViewHelper')
        ));

        $this->addElement('text', 'dt_agendamento', array(
            'decorators' => $this->elementDecorator,
            'class' => 'data',
            'required' => true,
            'label' => 'Data'
        ));

        $this->addElement('select', 'ds_turno', array(
            'MultiOptions' => array('M' => 'Manhã', 'T' => 'Tarde', 'N' => 'Noite'),
            'required' => true,
            'label' => 'Turno',
            'decorators' => $this->elementDecorator
        ));


        unset($combo[0]);
        $Vistoriadores = new Sistema_Model_Funcionarios();
        $combo = $Vistoriadores->getComboVistoriadoresByProcesso($this->_id_processo, true);

        if (!empty($this->idTipoVistoria) && !empty($this->idEmpresa)) {
            $rowsFuncionariosTreinamentos = $Vistoriadores->getFuncionariosTreinamentosByEmpresa([$this->idEmpresa])
                ->toArray();
            $funcionariosTreinamentos = [];

            foreach ($rowsFuncionariosTreinamentos as $row) {
                $funcionariosTreinamentos[$row['id_funcionario']][] = $row['id_tipo_vistoria'];
            }

            foreach ($combo as $key => $value) {
                if (empty($key)) {
                    continue;
                }

                if (!array_key_exists($key, $funcionariosTreinamentos)) {
                    unset($combo[$key]);
                }

                if (!in_array($this->idTipoVistoria, $funcionariosTreinamentos[$key])) {
                    unset($combo[$key]);
                }
            }
        }

        $this->addElement('select', 'id_funcionario', array(
            'MultiOptions' => $combo,
            'decorators' => $this->elementDecorator,
            'label' => 'Vistoriador',
            'required' => true
        ));

        $modelEmpresas = new Sistema_Model_Empresas();
        $combo = $modelEmpresas->getComboVistoriadoras();
        $this->addElement('select', 'id_segunda_empresa_vistoria', array(
            'MultiOptions' => $combo,
            'decorators' => $this->elementDecorator,
            'label' => 'Segunda Empresa',
            'required' => false
        ));

        $this->addElement('select', 'id_segundo_vistoriador', array(
            'MultiOptions' => [],
            'decorators' => $this->elementDecorator,
            'label' => 'Segundo Vistoriador',
            'required' => false
        ));

        $this->addElement('hidden', 'id_segundo_vistoriador_load', array(
            'decorators' => $this->elementDecorator,
            'required' => false
        ));

        $idEmpresa = (new Sinistro2_Model_ProcessosEmpresas())->getEmpresaByProcesso($this->_id_processo);
		
		$valueAuxiliares = [];

		if (!empty($this->_id_vistoria)) {
			$vistoria = (new Sistema_Model_Vistorias())->find($this->_id_vistoria)->current();

			$laudoFuncionarioModel = $vistoriaFuncionarioModel = null;

			if ($vistoria->id_tipo == Sistema_Model_TipoVistoria::FINAL) {
				$vistoriaLaudoModel = new Sistema_Model_VistoriasLaudosFinais();
				$laudoFuncionarioModel = new Sinistro2_Model_LaudosFinaisFuncionarios();
			} else {
				$vistoriaFuncionarioModel = new Sistema_Model_VistoriasFuncionarios();
				$vistoriaLaudoModel = new Sistema_Model_VistoriasLaudosPreliminares();
			}

			$laudo = $vistoriaLaudoModel->getLaudosByVistoria($vistoria->id);
			
			if (!empty($laudo)) {
				$auxiliaresSelecionados = $vistoria->id_tipo == Sistema_Model_TipoVistoria::FINAL
					? $laudoFuncionarioModel->getAuxiliaresByIdLaudo($laudo->id_laudo)
					: $vistoriaFuncionarioModel->getAuxiliaresByIdVistoria($this->_id_vistoria);

				if (!empty($auxiliaresSelecionados)) {
					$valueAuxiliares = array_column($auxiliaresSelecionados->toArray(), 'id_funcionario');
				}
			}
		}

		$this->addElement('select', 'id_auxiliar', array(
			'MultiOptions' => (new Sistema_Model_Funcionarios())->getArrayAuxiliaresByEmpresa($idEmpresa),
			'decorators' => $this->elementDecorator,
			'label' => 'Auxiliares',
			'required' => false,
			'multiple' => true,
            'class' => 'multiple',
			'value' => $valueAuxiliares
		));
    }

    public function populate($params)
    {

        if ($params['id_agendamento']) {

            $modelAgendamentosFuncionarios = new Sistema_Model_AgendamentosFuncionarios();
            $vistoriadorPrincipal = $modelAgendamentosFuncionarios->getVistoriador($params['id_agendamento'], true);

            if (!empty($vistoriadorPrincipal)) {
                $this->getElement('id_funcionario')->setValue($vistoriadorPrincipal['id_funcionario']);

                $vistoriadorSecundario = $modelAgendamentosFuncionarios->getVistoriador($params['id_agendamento'], false);
                if (!empty($vistoriadorSecundario)) {
                    $this->getElement('id_segunda_empresa_vistoria')->setValue($vistoriadorSecundario['id_empresa']);
                    $this->getElement('id_segundo_vistoriador_load')->setValue($vistoriadorSecundario['id_funcionario']);
                }
            }
        }

        parent::populate($params);
    }

    public function isValid($data)
    {
        if (!empty($this->getValue('id_funcionario'))) {
            $isValid = true;
        }

        return $isValid;
    }
}