<?php

class CepController extends Agro_Controller_Action 
{
	
	public function init() {
		$this->getHelper('layout')->setLayout('popup');
	}
	
	public function searchAction()
    {
        $this->view->request = $params = $this->getRequest()->getParams();
        $this->view->form = new Default_Form_Cep();
        $this->view->form->populate($this->view->request);

        if ($this->getRequest()->isPost()) {
            try {
                if (!empty($params['id_estado'])) {

                    $uf = (new Sistema_Model_Estados())->find($params['id_estado'])->current()['ds_sigla'];
                    $cep = new Agro_Cep();
                    $cep->setUF($uf);
                    $cep->setLocalidade($params['nome_municipio']);
                    $cep->setLogradouro($params['logradouro']);
                    $cep->setPage($params['page'] ? $params['page'] : 0);
                    $dadosCep = $cep->getCepInfo();
                    
                    $this->view->logradouros = $dadosCep['itens'];
                    $this->view->page = !empty($dadosCep['page']) ? $dadosCep['page'] : [];

                    if (!$this->view->logradouros) {
                        throw new Exception('Nenhum CEP encontrado.');
                    }
                } else {
                    throw new Exception('Por favor, preencha todos os campos obrigatórios.');
                }
            } catch (Exception $erro) {
                try {
                    if (empty($params['id_estado'])) {
                        throw new Exception('Por favor, preencha todos os campos obrigatórios.');
                    }
                    
                    $cepAuxiliar = new Agro_CepAuxiliar();
                    
                    $uf = (new Sistema_Model_Estados())->find($params['id_estado'])->current()['ds_sigla'];

                    $cepAuxiliar->setAddress($uf, $params['nome_municipio'], $params['logradouro']);
                    
                    $this->view->logradouros = $cepAuxiliar->getCepInfo();
                } catch (Exception $e) {
                    $this->view->showMessage($e->getMessage(), 'alert');
                }
            }
        }
    }
	
	public function filtrarAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$Municipios = new Sistema_Model_Municipios();
		$select = $Municipios->select();
		$municipios = array();
		
		if ($this->getRequest()->getParam('id_estado')) {
			$select->where('id_estado = ?', $this->getRequest()->getParam('id_estado'));
			
			if ($this->getRequest()->getParam('nome_municipio')) {
				$select->where('ds_nome_municipio ilike ?', '%'.$this->getRequest()->getParam('nome_municipio').'%');
			}
			
			$select->order('ds_nome_municipio');
			
			$Rs = $Municipios->fetchAll($select);
			if ($Rs) {
				foreach ($Rs as $row) {
					$municipios[$row->id] = $row->ds_nome_municipio;
				}
			}
		} else {
			$municipios[] = 'Informe um Estado';
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($municipios));
	}

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

        if ($this->getRequest()->getParam('cep')) {

            try {
                if (strlen(str_replace('-', '', $this->getRequest()->getParam('cep'))) < 8) {
                    throw new Exception("Número de CEP inválido.");
                }

                $cep = new Agro_Cep();
                $cep->setCep($this->getRequest()->getParam('cep'));
                $resp = $cep->getCepInfo();
                $this->getResponse()->setBody(Zend_Json::encode($resp));

            } catch (\Throwable $th) {
                try {
                    if (strlen(str_replace('-', '', $this->getRequest()->getParam('cep'))) < 8) {
                        throw new Exception("Número de CEP inválido.");
                    }

                    $cep = new Agro_CepAuxiliar();
                    $cep->setCep($this->getRequest()->getParam('cep'));
                    $resp = $cep->getCepInfo();
                    $this->getResponse()->setBody(Zend_Json::encode($resp));
                } catch (Exception $e) {
                    $this->getResponse()->setBody(Zend_Json::encode(['erro' => true, 'mensagemPersonalizada' => $th->getMessage()]));
                }

            }
        }
    }

    public function buscacepexceptionAction()
    {
        $this->isAjax();

        if ($this->getRequest()->getParam('cep')) {
            try {
                $Cep = new Agro_Cep();
                $Cep->setCep($this->getRequest()->getParam('cep'));
                $resp = $Cep->getCepInfo();
                
                $this->getResponse()->setBody(Zend_Json::encode($resp));
            } catch (Exception $erro) {
                try {
                    $Cep = new Agro_CepAuxiliar();
                    $Cep->setCep($this->getRequest()->getParam('cep'));
                    $resp = $Cep->getCepInfo();

                    $this->getResponse()->setBody(Zend_Json::encode($resp));
                } catch (Exception $e) {
                    $this->getResponse()->setBody(Zend_Json::encode(['erro' => true, 'mensagem' => $e->getMessage()]));
                }
            }
        }
    }
}