<?php

class Sinistro2_Model_MotivosQuadraNaoVistoriada extends Agro_Db_Table_Abstract
{
    const AREA_COLHIDA = 1;
    const SEGURADO_DISPENSA_VISTORIA = 2;
    const AREA_ERRADICADA = 3;
    const NAO_SEMEADURA_TALHAO = 4;
    const NAO_EMERGENCIA_PLANTAS = 5;
    const CONDICOES_CLIMATICAS_DESFAVORAVEIS = 6;
    const AREA_NAO_ATINGIDA = 7;
    const CULTURA_NAO_ESTA_MADURA = 8;
    const ITEM_CONSTA_VISTORIA_DATA_ANTERIOR = 9;
    const NAO_REALIZADA_NESTA_VISTORIA = 10;
    const COORDENADAS_NAO_COINCIDEM = 11;
    const DATA_OCORRENCIA_EVENTO_FORA_PERIODO = 12;
    const ACOMPANHANTE_NAO_PRESENTE = 14;
    const VISTORIA_NAO_CONCLUIDA = 15;
    const ABANDONO_AREA = 16;
    const PRIMEIRO_ANO_PLANTIO = 17;
    const RESTRICOES_TECNICAS = 18;
    const MANEJO_INADEQUADO_LAVOURA_POMAR = 19;
    const LAMINA_DAGUA = 20;
    const INUNDACAO_TOTAL = 21;
    const CONDUTA_INADEQUADA_ATIPICA = 22;
    const OCORRENCIA_EVENTO_NAO_COBERTO = 23;
    const AUSENCIA_IRRIGACAO = 24;
    const CULTURA_AVALIADA_DIVERGENTE_CULTURA_CONTRATADA = 25;



	protected $_schema = 'sinistro';
	protected $_name = 'motivos_quadra_nao_vistoriada';
	protected $_primary = 'id';
	public $_order = 'ds_motivo';
	
	public function getData($where=false) 
	{
		$select = $this
			->select()
			->setIntegrityCheck(false)
			->from(['m' => "{$this->_schema}.{$this->_name}"], ['id', 'ds_motivo', 'fl_laudo', 'id_status'])
			->join(["st" => "sistema.status"], "st.id = id_status", ['ds_status'])
			->join(['mtp' => 'sinistro.motivos_quadra_nao_vistoriada_tipos'], 'mtp.id_motivo_quadra_nao_vistoriada = m.id', false)
			->join(["tmqnv" => "sinistro.tipos_motivos_quadra_nao_vistoriada"], "tmqnv.id = mtp.id_tipo_motivo_quadra_nao_vistoriada", ["string_agg(ds_descricao, ', ') as ds_descricao"])
			->group(['st.ds_status', 'm.id', 'm.ds_motivo', 'm.fl_laudo', 'm.id_status']);

		if ($this->_order) {
			$select->order($this->_order);
		}

		$this->getWhere($select, $where);
		return $select;
	}

	public function save(array $data) {
		try {
			$Row = $this->getRow($data['id']);
			
			$Row->ds_motivo = $data['ds_motivo'];
			$Row->id_status = $data['id_status'];

			$modelMotivosTipos = new Sinistro2_Model_MotivosQuadraNaoVistoriadaTipos();
			
			$idMotivoQuadraNaoVistoriada = $Row->save();
			
			$modelMotivosTipos->save([
				'id_motivo_quadra_nao_vistoriada' => $idMotivoQuadraNaoVistoriada, 
				'id_tipo_motivo_quadra_nao_vistoriada' => $data['id_tipo_motivo_quadra_nao_vistoriada']
			]);
			
			return $idMotivoQuadraNaoVistoriada;
				
		} catch (Exception $e) {
			$this->setMessage($e->getMessage());
			return false;
		}
	}

	public function delete(int $id): void
	{
		$this->_db->query("DELETE FROM sinistro.motivos_quadra_nao_vistoriada_tipos WHERE id_motivo_quadra_nao_vistoriada = {$id}");
		$this->_db->query("DELETE FROM sinistro.motivos_quadra_nao_vistoriada WHERE id = {$id}");
	}
		
	public function getComboLaudo(array $ItensSegurados) {
	    $select = $this->select()
			->setIntegrityCheck(false)
	    	->from(array('m' => $this->_schema.'.'.$this->_name), array('id', 'ds_motivo'))
			->join(array('mtp' => 'sinistro.motivos_quadra_nao_vistoriada_tipos'), 'mtp.id_motivo_quadra_nao_vistoriada = m.id', false)
			->where("mtp.id_tipo_motivo_quadra_nao_vistoriada NOT IN (" 
				. Sinistro2_Model_TiposMotivosQuadraNaoVistoriada::AUTOMATICO
			. ")")
	    	->order("ds_motivo asc");
	    
	    $MotivosQuadraNaoVistoriada = $this->_db->fetchAll($select);
	    
	    $Combos = array();
	    
	    $htmlCombo  = '<select name="id_motivo_quadra_nao_vistoriada[{ID_ITEM_SEGURADO}]" id="id_motivo_quadra_nao_vistoriada_{ID_ITEM_SEGURADO}">';
	    $htmlCombo .= '   <option value="0">Selecione um motivo</option>';

	    foreach($MotivosQuadraNaoVistoriada as $Motivo) {
	        $htmlCombo .= '   <option value="'.$Motivo['id'].'"{SELECTED_'.$Motivo['id'].'}>'.$Motivo['ds_motivo'].'</option>';
	    }
	    $htmlCombo .= '</select>';
	    
	    foreach ($ItensSegurados as $ItemSegurado) {
	        $htmlComboItemSegurado = str_replace('{ID_ITEM_SEGURADO}', $ItemSegurado['id_item_segurado'], $htmlCombo);
	        if($ItemSegurado['fl_nao_vistoriada']) {
	            $htmlComboItemSegurado = str_replace('{SELECTED_'.$ItemSegurado['id_motivo_quadra_nao_vistoriada'].'}', ' selected', $htmlComboItemSegurado);
	        }
	        $Combos[$ItemSegurado['id_item_segurado']] = $htmlComboItemSegurado;
	    }
	    
	    return $Combos;
	}

    public function getMotivosNaoVistoriadas (array $ItensSegurados) {
        $arMotivosQuadraNaoVistoriada = array();                        
            
        $select = $this->select()
			->setIntegrityCheck(false)
        	->from(array('m' => $this->_schema.'.'.$this->_name), array('id', 'ds_motivo'))
			->join(array('mtp' => 'sinistro.motivos_quadra_nao_vistoriada_tipos'), 'mtp.id_motivo_quadra_nao_vistoriada = m.id', false)
        	->order("ds_motivo asc");
        
        $MotivosQuadraNaoVistoriada = $this->_db->fetchAll($select);
        
        foreach ($MotivosQuadraNaoVistoriada as $Motivo) {
            $arMotivosQuadraNaoVistoriada[$Motivo['id']] = $Motivo['ds_motivo'];
        }
        
        $arQuadrasMotivos = array();
        
        foreach($ItensSegurados as $ItemSegurado) {
            if ($ItemSegurado['fl_nao_vistoriada']) {
                $arQuadrasMotivos[$ItemSegurado['id_item_segurado']] = $arMotivosQuadraNaoVistoriada[$ItemSegurado['id_motivo_quadra_nao_vistoriada']];
            } else {
                $arQuadrasMotivos[$ItemSegurado['id_item_segurado']] = '-';
            }
        }
        
        return $arQuadrasMotivos;
    }

    public function getOptions(?array $ids = []): array
	{
        $arMotivos = array();
        $arMotivos[0] = 'Selecione o motivo';
		
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('m'=>$this->_schema.'.'.$this->_name), array('id', 'ds_motivo'));
		
		if (!empty($ids)) {
			$select->where("m.id IN (?)", $ids);
		} else {
			$select->join(array('mtp' => 'sinistro.motivos_quadra_nao_vistoriada_tipos'), 'mtp.id_motivo_quadra_nao_vistoriada = m.id');
			$select->where("id_tipo_motivo_quadra_nao_vistoriada NOT IN (" . Sinistro2_Model_TiposMotivosQuadraNaoVistoriada::AUTOMATICO . ")");
		}
		
		$select->order("ds_motivo asc");

		$motivosQuadraNaoVistoriada = $this->_db->fetchAll($select);
        foreach($motivosQuadraNaoVistoriada as $Motivo) {
            $arMotivos[$Motivo['id']] = $Motivo['ds_motivo'];
        }
        
        return $arMotivos;
    }

	/**
	 * Retorna o id do status vinculado ao motivo
	 * 
	 * @param int|null $id
	 * @return int
	 */
	public function getStatusIdByMotivo(?int $id): int
	{
		if (empty($id)) {
			return (new Sistema_Model_Status())->getIdByChaveTipoChave('FINALIZADO','ITENS_VISTORIAS_FINAIS');
		}

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("mqnv" => $this->_schema.".".$this->_name),'id_status');
		$select->where("mqnv.id = ?", $id);

		return $this->_db->fetchOne($select);
	}

	public function getComboByTipo(array $tipos = array())
	{
        $select = $this->select()
			->setIntegrityCheck(false)
			->from(array('m' => $this->_schema.'.'.$this->_name), array('id', 'ds_motivo'))
			->join(array('mtp' => 'sinistro.motivos_quadra_nao_vistoriada_tipos'), 'mtp.id_motivo_quadra_nao_vistoriada = m.id', false)
			->order("ds_motivo asc");

		if (!empty($tipos)) {
			$select->where("id_tipo_motivo_quadra_nao_vistoriada IN (" . implode(" , ", $tipos) . ")");
		}

		$rs = $this->_db->fetchAll($select);
		
		$motivos = array();
		$motivos[0] = 'Selecione o motivo...';

        foreach($rs as $motivo) {
            $motivos[$motivo['id']] = $motivo['ds_motivo'];
        }
        
        return $motivos;
	}
}