<?php

class Sistema_Model_Estados extends Agro_Db_Table_Abstract {
	public $_pairs = array('key' => 'id', 'field' => 'ds_nome_estado');
	protected $_schema = 'sistema';
	protected $_name = 'estados';
	protected $_primary = 'id';
	public $_order = 'ds_sigla';

	public $_columnExcel = array(
		'id' => 'Cod.',
		'ds_nome_estado' => 'Estado',
		'ds_sigla' => 'Sigla'
	);

	public function save(array $data) {
		$Row = $this->getRow($data['id']);

		if(!$Row->id_pais) {
			$this->setMessage("O campo país deve ser preenchido!");
			return false;
		}


		$Row->ds_nome_estado = ($data['ds_nome_estado'] ? $data['ds_nome_estado'] : null);
		$Row->ds_sigla = ($data['ds_sigla'] ? $data['ds_sigla'] : null);
		$Row->nr_ibge = ($data['nr_ibge'] ? $data['nr_ibge'] : null);
		$Row->id_pais = $Row->id_pais;

		return $Row->save();
	}

	public function getId($ds_sigla){
		$Row = $this->fetchRow("ds_sigla = '$ds_sigla'");

		return $Row->id;

	}

	public function getCombo($field='ds_sigla', $idPais='', $first=true) {
		if ($idPais) {
			$Rs = $this->fetchAll("id_pais = $idPais and fl_ativo = true and fl_del = false", $field);
		} else {
			$Rs = $this->fetchAll("fl_ativo = true and fl_del = false", $this->_order);
		}

		if (is_object($Rs)) {
			if ($first) $options[] = '';
			foreach ($Rs as $row) {
				$options[$row->id] = $row->{$field};
			}

			return $options;
		} else {
			return false;
		}
	}

	public function getEstadoAbas($id_comercializacao = null){

		$select = $this->select();
		$select->from(array('e'=>'sistema.estados'),array('id','ds_sigla'));
		$select->where('e.fl_ativo = true');
		$select->order('e.ds_sigla');

		$return = array();

		if (!$id_comercializacao){
			$return = $this->fetchAll($select)->toArray();

		} else {
			$ModelComercializacao = new Comercializacao_Model_Comercializacoes();

			$comercializacao = array();
			$comercializacao = $ModelComercializacao->getEstadosComercializados($id_comercializacao);

			$estados = $this->fetchAll($select)->toArray();

			foreach ($estados as $estado){
				if (in_array($estado['id'], $comercializacao)){
					$comercializado = 1;
				} else {
					$comercializado = 0;
				}

				$return[] = array('id' => $estado['id'],
								  'ds_sigla' => $estado['ds_sigla'],
								  'comercializado' => $comercializado);
			}

		}

		return $return;
	}

	
	public function getEstadoAbasLmga($id_grupo = null){
	
		$select = $this->select();
		$select->from(array('e'=>'sistema.estados'),array('id','ds_sigla'));
		$select->where('e.fl_ativo = true');
		$select->order('e.ds_sigla');
	
		$return = array();
	
		if (!$id_grupo){
			$return = $this->fetchAll($select)->toArray();
	
		} else {
			$ModelLimiteLmga = new Produto_Model_ValidacaoLimitesLmga();
	
			$limitelmga = array();
			$limitelmga = $ModelLimiteLmga->getEstadosComercializados($id_grupo);
	
			$estados = $this->fetchAll($select)->toArray();
	
			foreach ($estados as $estado){
				if (in_array($estado['id'], $limitelmga)){
					$comercializado = 1;
				} else {
					$comercializado = 0;
				}
	
				$return[] = array('id' => $estado['id'],
						'ds_sigla' => $estado['ds_sigla'],
						'comercializado' => $comercializado);
			}
	
		}
	
		return $return;
	}	
	
	public function getMenuEstado(){
		$select = $this->select();
		$select->from(array('e'=>'sistema.estados'),array('id','ds_sigla'));
		$select->where('e.fl_ativo = true');
		$select->order('e.ds_sigla');

		$ret = array();
		$estados = $this->_db->fetchAll($select);
		foreach($estados as $estado){
			$ret[$estado['ds_sigla']] = $estado['id'];
		}

		return $ret;
	}

	public function getMenuEstadoAbas(){
		$select = $this->_db->select();
		$select->from(array('e'=>'sistema.estados'),array('id','ds_sigla'));
		$select->where('e.fl_ativo = true');
		$select->order('e.ds_sigla');

		$ret = array();
		$estados = $this->_db->fetchAll($select);
		foreach($estados as $estado){
			$ret[$estado['ds_sigla']] = $this->getMunicipios($estado['id']);
		}

		return $ret;
	}

	public function getMunicipios($id) {
		$select = $this->_db->select();
		$select->from(array('m'=>'sistema.municipios'),array('id','ds_nome_municipio'));
		$select->where("m.fl_ativo = true and id_estado = $id");
		$select->order('m.ds_nome_municipio');

		$ret = array();
		$municipios = $this->_db->fetchAll($select);
		foreach($municipios as $municipio){
			$arr = array('');
			$arr[$municipio['ds_nome_municipio']] = array();
			$ret[$municipio['id']] = $arr;
		}

		return $ret;
	}

	public function getName($id) {
		$Row = $this->find($id)->current();
		return $Row->{$this->_order};
	}

	public function getEstadosByIdsMunicipio(array $idsMunicipios): Zend_Db_Table_Rowset 
	{
		return $this->fetchAll(
			$this
				->select()
				->distinct()
				->from(array('e'=>'sistema.estados'), array('id','ds_sigla'))
				->joinInner(array('m'=>'sistema.municipios'), 'id_estado = e.id', null)
				->where('m.fl_ativo = true')
				->where('m.id IN ('. implode(',', $idsMunicipios) .')'));
	}
	
	public function getComboEstadosPossuemVistoriaPorIdEmpresa(int $idEmpresa): array
	{
		$selectFinal = $this->select()
			->setIntegrityCheck(false)
			->from(['svlf' => 'sistema.vistorias_laudos_finais'], false)
			->join(['slf' => 'sinistro.laudos_finais'], 'slf.id = svlf.id_laudo_final', false)
			->join(['semp' => 'sinistro.processos_empresas'], 'semp.id_processo = slf.id_processo', false)
			->join(['sp' => 'sinistro.processos'], 'sp.id = semp.id_processo', false)
			->join(['spprop' => 'seguro.propostas_propriedades'], 'spprop.id_proposta = sp.id_proposta', false)
			->join(['sm' => 'sistema.municipios'], 'sm.id = spprop.id_municipio', false)
			->join(['suf' => 'sistema.estados'], 'suf.id = sm.id_estado', 'ds_sigla, suf.id as id_estado')
			->where('semp.id_empresa = ?', $idEmpresa);

		$selectPreliminar = $this->select()
			->setIntegrityCheck(false)
			->from(['svlp' => 'sistema.vistorias_laudos_preliminares'], false)
			->join(['slp' => 'sinistro.laudos_preliminares'], 'slp.id = svlp.id_laudo_preliminar', false)
			->join(['semp' => 'sinistro.processos_empresas'], 'semp.id_processo = slp.id_processo', false)
			->join(['sp' => 'sinistro.processos'], 'sp.id = semp.id_processo', false)
			->join(['spprop' => 'seguro.propostas_propriedades'], 'spprop.id_proposta = sp.id_proposta', false)
			->join(['sm' => 'sistema.municipios'], 'sm.id = spprop.id_municipio', false)
			->join(['suf' => 'sistema.estados'], 'suf.id = sm.id_estado', 'ds_sigla, suf.id as id_estado')
			->where('semp.id_empresa = ?', $idEmpresa);

		$selectPrevia = $this->select()
			->setIntegrityCheck(false)
			->from(['spvp' => 'seguro.propostas_vistorias_previas'], false)
			->join(['sve' => 'sistema.vistorias_empresas'], 'sve.id_vistoria = spvp.id_vistoria', false)
			->join(['spprop' => 'seguro.propostas_propriedades'], 'spprop.id_proposta = spvp.id_proposta', false)
			->join(['sm' => 'sistema.municipios'], 'sm.id = spprop.id_municipio', false)
			->join(['suf' => 'sistema.estados'], 'suf.id = sm.id_estado', 'ds_sigla, suf.id as id_estado')
			->where('sve.id_empresa = ?', $idEmpresa);

		$select = $this->select()->union([$selectFinal, $selectPreliminar, $selectPrevia]);
	
		$rs = $this->_db->fetchAll(
			$this->select()
				->setIntegrityCheck(false)
				->from(['subq' => $select])
				->group('id_estado, ds_sigla')
				->order('ds_sigla ASC')
		);
		
		$combo = [0 => ''];

		foreach($rs as $row) {
			$combo[$row['id_estado']] = $row['ds_sigla'];
		}

		return $combo;
	}

}