<?php
  class ControllerPostcodePostcode extends Controller {

    public function index() {

      $this->load->helper('ftr_geral');
      $language = $this->load->language('postcode/postcode');
      $this->data = array_merge($this->data, $language);

      $this->data['loading'] = $this->url->link('assets/img/loading-black.svg', '', 'SSL', false, true);

      $this->response->setOutput($this->render('postcode/postcode'));
    }

    public function listAddressData(){

        $this->listAddress();

        return $this->response->setOutputJson($this->data);

    }

    public function listAddress(){

      if(trim(isset($this->request->post['dados'])) && ($this->request->post['dados']!='')){
        $dados = trim($this->request->post['dados']);
      }else{
        $this->data['error'] = 'O campo busca esta em branco!';
      }

      if(!isset($this->data['error'])){
        try {
          $this->load->dmodel('localisation/zone');
          $results = $this->cep->getCepEndereco($dados);
          if($results){
            foreach(array_slice($results, 0, 100) as $key => $result){
              $this->data['dados'][] = array(
                'postcode'    => substr_replace($result['cep'], '-', 5, 0),
                'address_1'   => ucwords(mb_strtolower(html_entity_decode(trim($result['logradouro_completo']), ENT_QUOTES, 'UTF-8'))),
                'complemento' => ucwords(mb_strtolower(html_entity_decode(trim($result['complemento']), ENT_QUOTES, 'UTF-8'))),
                'address_2'   => ucwords(mb_strtolower(html_entity_decode(trim($result['bairro']), ENT_QUOTES, 'UTF-8'))),
                'city'        => ucwords(mb_strtolower(html_entity_decode(trim($result['cidade']), ENT_QUOTES, 'UTF-8'))).'/'.$result['uf']
              );
            }
          }else{
            $this->data['error'] = 'A busca não retornou nenhuma informação, altere o endereço ou tente novamente mais tarde!';
          }
        }catch(Exception $e){
          $this->data['error']= 'Ocorreu um erro ao consultar as informações. Tente novamente mais tarde!';
        }
      }

      $this->response->setOutput($this->render('postcode/listAddress'));

    }

    public function search($forQuote = false){

      $this->language->load('checkout/checkout');

      $json = array();

      if(isset($this->request->post['cep']) && ($this->request->post['cep']!='')){
        $cep = preg_replace("/[^0-9]/", "", $this->request->post['cep']);
      }else{
        $json['error'] = 'Nenhum cep foi informado!';
      }

      if(!$json){

        if(isset($this->request->post['app'])){
          //para rodar no success do ajax somente oq for especifico para o app
          $json['app'] = true;
        }elseif(isset($this->request->post['frete'])){
          //para rodar no success do ajax somente oq for especifico para o calculo do frete
          $json['frete'] = true ;
        }

        try {
          $this->load->dmodel('localisation/zone');
          $result = $this->cep->getCep($cep);
          if ($result) {
            $zone_id = $this->dmodel_localisation_zone->getZoneIdByUf($result['uf']);
            $json['dados'] = array(
              'postcode'         => substr_replace($result['cep'], '-', 5, 0),
              'address_1'        => ucwords(mb_strtolower($result['logradouro_completo'])),
              'tipo_logradouro'  => ucwords(mb_strtolower($result['tipo_logradouro'])),
              'logradouro'       => ucwords(mb_strtolower($result['logradouro'])),
              'address_2'        => ucwords(mb_strtolower($result['bairro'])),
              'city'             => ucwords(mb_strtolower($result['cidade'])),
              'zone_id'          => $zone_id,
              'codigo_municipio' => $result['codigo_municipio']
            );
          } else {
            $json['error'] = 'CEP não encontrado, cadastre seu endereço.';
          }
        }catch(Exception $e){
          $json['error'] = 'Ocorreu um erro ao consultar o CEP. Tente novamente mais tarde!';
        }
      }

      if (isset($json['error'])) {
        $json['warning'] = $this->language->get('error_warning_register');
      }

      if ($forQuote) {
        return $json;
      } else {
        $this->response->setOutputJson($json);
      }

    }

    public function listCities(){
      $this->load->dmodel('localisation/ibge');
      $json = array();
      $json['cities'] = $this->dmodel_localisation_ibge->getMunicipios($this->request->post['zone_id']);
      $this->response->setOutputJson($json);
    }

    public function listStates()
    {
        $this->load->model('localisation/zone');
        $this->response->setOutputJson($this->model_localisation_zone->getZonesByCountryId(Type_PaisId::Tp_Brasil));
    }


  }
?>
