<?php

class Sistema_Model_VistoriasFuncionarios extends Agro_Db_Table_Abstract {
	protected $_schema = 'sistema';
	protected $_name = 'vistorias_funcionarios';
	protected $_primary = array('id_vistoria','id_funcionario');
	protected $_sequence = false;
	
	public function save(array $data) {
		
		$this->delete($data['id_vistoria']);
		
		$Row = $this->find($data[id_vistoria],$data[id_funcionario])->current();
		if (!$Row) {
			$Row = $this->createRow();
		}
		$Row->id_vistoria = $data[id_vistoria];
		$Row->id_funcionario = $data[id_funcionario];
		
		return $Row->save();
	}
	
	public function getVistoriadoresByVistoria($idVistoria) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('vf' => 'sistema.vistorias_funcionarios'));
        $select->join(['sf' => 'sistema.funcionarios'], 'vf.id_funcionario = sf.id', ['ds_nome_funcionario', 'ds_email']);
		$select->where("vf.id_vistoria = ?", $idVistoria);
		$rs = $this->fetchAll($select);
		$result = array();
		
		foreach ($rs as $item) {
			$result[$item['id_funcionario']] = array(
				'id_funcionario' => $item['id_funcionario'],
				'id_vistoria'     => $item['id_vistoria'],
                'ds_nome_funcionario' => $item['ds_nome_funcionario'],
                'ds_email' => $item['ds_email']
			);
		}
		
		return $result;
	}
    
    public function getArrayVistoriadoresByIDLaudoPreliminar($idLaudoPreliminar, $auxiliares=false) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('vlp'=>'sistema.vistorias_laudos_preliminares'), null);
		$select->join(array('vf' => $this->_schema .'.'. $this->_name), 'vf.id_vistoria = vlp.id_vistoria' ,'id_funcionario');
		$select->join(array('f' => 'sistema.funcionarios'), 'f.id = vf.id_funcionario', false);
		$select->join(array('u' => 'sistema.usuarios'), 'f.id_usuario = u.id', false);
		$select->where("vlp.id_laudo_preliminar = ?", $idLaudoPreliminar);

		if ($auxiliares) {
			$select->where("u.tp_usuario = 'H'");
		} else {
			$select->where("u.tp_usuario <> 'H'");
		}

        $rs = $this->fetchAll($select);
        $result = array();
        
        foreach ($rs as $item) {
            $result[] = $item['id_funcionario'];
        }
        
        return $result;
    }   
	
	public function delete($idVistoria) {
		//$this->_db->query("delete from {$this->_schema}.{$this->_name} where id_vistoria = $idVistoria");
		
		parent::delete($idVistoria, 'id_vistoria');
		
	}

	public function deleteAuxiliares(int $idVistoria): void {
		$constAuxiliar = Sistema_Model_Usuarios::TIPO_USUARIO_HELPER;

		$this->_db->query("
			DELETE FROM {$this->_schema}.{$this->_name}
			WHERE 
				id_vistoria = {$idVistoria}
				AND id_funcionario IN (
					SELECT
						id_funcionario
					FROM 
						{$this->_schema}.{$this->_name} vf
					INNER JOIN sistema.funcionarios f
						ON f.id = vf.id_funcionario
					INNER JOIN sistema.usuarios u
						ON u.id = f.id_usuario
					WHERE
						vf.id_vistoria = {$idVistoria}
						AND u.tp_usuario IN ('{$constAuxiliar}')
				)
		");
	}

	public function getAuxiliaresByIdVistoria(int $idVistoria): ?Zend_Db_Table_Rowset {
		$constAuxiliar = Sistema_Model_Usuarios::TIPO_USUARIO_HELPER;

		return $this->fetchAll(
			$this
				->select()
				->setIntegrityCheck(false)
				->from(array('vf' => $this->_schema .'.'. $this->_name, '*'))
				->join(array('f' => 'sistema.funcionarios'), 'vf.id_funcionario = f.id', false)
				->join(array('u' => 'sistema.usuarios'), 'f.id_usuario = u.id', false)
				->where('id_vistoria = ?', $idVistoria)
				->where("u.tp_usuario IN ('{$constAuxiliar}')")
		);
	}
}
