<?php
class ModelShippingJadLog extends Model {

	function getQuote($address, $pProduct = Array()) {
    $this->load->type('tipocomum');

    //feito a principio para skyhub Frete, mais pode ser utilizado para qualquer frete que
    //não tenha informações do estado...
    if((!$address['zone_id']) && ($address['layout_id'] == Type_SendPostcode::Tp_Product)){
      $status = true;
    }else {
      $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('jadlog_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");

      if (!$this->config->get('jadlog_geo_zone_id')) {
        $status = true;
      } elseif ($query->num_rows) {
        $status = true;
      } else {
        $status = false;
      }
    }

		$method_data = array();

		if ($status) {
      try{

        if(sizeof($pProduct) > 0){
          $products  = $pProduct;
          $peso      = 0;
          $sub_total = 0;
          foreach($pProduct as $prod){
            $peso       += $prod['weight'];
            $sub_total  += $prod['price'] * $prod['quantity'];
          }
        }else{
          $products  = $this->cart->getProducts();
          $peso      = $this->cart->getWeight();
          $sub_total = $this->cart->getSubTotal();
        }

        $cost = 0;
        $qtd = 0;
        $profundidade = 0;
        $altura = 0;
        $comprimento = 0;
        foreach ($products as $prod) {
            $prod['width'] = $prod['width']*$prod['quantity'];
            if($profundidade < $prod['length']){
                $profundidade = $prod['length'];
            }
            if($altura<$prod['height']){
                $altura = $prod['height'];
            }
            $comprimento += $prod['width'];
        }

				if ($this->config->get('jadlog_tipo_peso') == Type_JadLogPeso::Tp_Cubagem){
					$rodoviarios = array(Type_ModJadlog::Tp_Packge,Type_ModJadlog::Tp_Rodoviario,Type_ModJadlog::Tp_Economico,Type_ModJadlog::Tp_Doc,Type_ModJadlog::Tp_Emergencial);
					if (in_array($this->config->get('jadlog_mod'), $rodoviarios)) {
					    $fatorCubagem = 3333;
					}else{
						$fatorCubagem = 6000;
					}

					$cubagem = $altura*$comprimento*$profundidade;
					$peso = $cubagem/$fatorCubagem;
				}

                        $soaptimeoutini = ini_get('default_socket_timeout');

                        ini_set('default_socket_timeout', 5);//timeout de 4 segundos pra não travar a conexão...
													/**/
													 //$url ='http://jadlog.com.br/JadlogWebService/services/ValorFreteBean?method=valorar&vModalidade='.$this->config->get('jadlog_mod').'&Password='.$this->config->get('jadlog_senha').'&vSeguro=N&vVlDec='.$sub_total.'&vVlColeta='.$this->config->get('jadlog_taxa').'&vCepOrig='.$this->config->get('jadlog_cep').'&vCepDest='.str_replace('-','',$address['postcode']).'&vPeso='.$peso.'&vAltura='.number_format($altura,0,'','').'&vLargura='.number_format($profundidade,0,'','').'&vProfudidade='.number_format($comprimento,0,'','').'&vFrap=N&vEntrega=D&vCnpj='.$this->config->get('jadlog_cnpj').'';
													 $url ='http://www.jadlog.com.br:8080/JadlogEdiWs/services/ValorFreteBean?method=valorar&vModalidade='.$this->config->get('jadlog_mod').'&Password='.$this->config->get('jadlog_senha').'&vSeguro=N&vVlDec='.$sub_total.'&vVlColeta='.$this->config->get('jadlog_taxa').'&vCepOrig='.$this->config->get('jadlog_cep').'&vCepDest='.str_replace('-','',$address['postcode']).'&vPeso='.$peso.'&vFrap=N&vEntrega=D&vCnpj='.$this->config->get('jadlog_cnpj').'';
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL, $url);
                        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 2);
                        $html1 = curl_exec ($ch);
                        curl_close ($ch);
                        ini_set('default_socket_timeout', $soaptimeoutini);//volta o timeout do php default...

                        if (isset($html1) && ($html1)){
                            $html = str_replace('&lt;Retorno&gt;','<Retorno>',$html1);
                            $html = str_replace('&lt;/Retorno&gt;','</Retorno>',$html);
                            $html = str_replace(',','.',$html);
                            $html = explode('<Retorno>', $html);
                            $html2 = explode('</Retorno>', $html[1]);
                            $cost = (float)$html2[0];
                            $prazoEstimado = $this->config->get('jadlog_prazo_estimado');
                            if(is_null($prazoEstimado)){
                              $prazoEstimado = 0;
                            }
                            $tituloFrete = 'Jadlog - ';
                            if($prazoEstimado > 0){
                              $tituloFrete .= "$prazoEstimado Dias úteis";
                            }

                            $quote_data = array();

                            if ($cost>0) {
                                $quote_data['jadlog'] = array(
                                    'code'         => 'jadlog.jadlog',
                                    'title'        => $tituloFrete,
                                    'days'         => $prazoEstimado,
                                    'cost'         => round((float)$cost, 2, PHP_ROUND_HALF_UP),
                                    'text'         => $this->currency->format($cost)
                                );
                                $method_data = array(
                                        'code'       => 'jadlog',
                                        'title'      => $this->config->get('jadlog_nome'),
                                        'quote'      => $quote_data,
                                        'sort_order' => $this->config->get('jadlog_sort_order'),
                                        'error'      => false
                                );
                            }
                        }
                    } catch (Exception $e) {
                        ini_set('default_socket_timeout', $soaptimeoutini);//volta o timeout do php default...
                    //Vazio mesmo, para que nãos eja exibido nenhum erro e não trave a exibição das demais formas de pagamento....
                    }

                }

		return $method_data;
	}

}
