<?php
class ModelShippingFree extends Model {

  private $dadosConfig = array () ;
  private $validaDados = array () ;
  private $zoneId      = false    ;
  private $tipoPessoa   ;

  public function setValidaDados($zoneId, $price){

    $this->load->type('tipocomum');

    if($this->customer->getCnpj()){
      $this->validaDados['removeTipoPessoa'] = Type_CadastroPessoa::Tp_Fisico;
    }else{
      $this->validaDados['removeTipoPessoa'] = Type_CadastroPessoa::Tp_Juridico;
    }

    $this->validaDados['zoneId'] = $zoneId ;
    $this->validaDados['price']  = $price ;
    $this->validaDados['permiteSemZoneId'] = (!$zoneId) && (isset($this->validaDados['layout_id']) && $this->validaDados['layout_id'] == Type_SendPostcode::Tp_Product);

  }

  public function getDadosConfig(){

    $this->load->type('tipocomum');
    $this->load->helper('ftr_geral');

    $arrayQuery = array ();
    $retorno    = false ;

    if(ftr_geral::isIsset($this->config->get('free_module'))){
       $arrayQuery = $this->config->get('free_module') ;
    }else{
      $query = $this->db->query("SELECT `key`, value FROM " . DB_PREFIX . "setting WHERE  `group` = 'free' ");
      foreach ($query->rows as $key => $value){
        $arrayQuery[0][$value['key']] = $value['value'];
      }
    }

    if(count($arrayQuery)>0){

      foreach ($arrayQuery as $key => $value) {

        if(!$value['free_status']){
          unset($arrayQuery[$key]);
        }

        if(is_numeric($value['free_habilitar_pessoa_tipo'])){
          $value['free_habilitar_pessoa_tipo'] = Type_CadastroPessoa::getNickFromInt($value['free_habilitar_pessoa_tipo'],true);
        }

        if(array_search($this->validaDados['removeTipoPessoa'], $value)){
          unset($arrayQuery[$key]);
        }

        if(($this->validaDados['zoneId']) && (!$this->validaDados['permiteSemZoneId'])){
          $query = $this->db->query("SELECT GROUP_CONCAT(zone_id) as list_zone_id FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '".(int)$value['free_geo_zone_id']."' ");
          if(!is_null($query->row['list_zone_id'])){
            $list_zone_id = explode(',', $query->row['list_zone_id']);
            //utilizado o valor 0 na comparação pois quando salva a opção TODOS tem o valor 0
            if( ($value['free_geo_zone_id'] <> 0) && (!in_array($this->validaDados['zoneId'], $list_zone_id) ) ){
              unset($arrayQuery[$key]);
            }
          }else{
            //utilizado o valor 0 na comparação pois quando salva a opção TODOS tem o valor 0
            if( ($value['free_geo_zone_id'] <> 0) && ($value['free_geo_zone_id'] <> $this->validaDados['zoneId']) ){
              unset($arrayQuery[$key]);
            }
          }
        }

        if((float)$this->validaDados['price'] < (float)$value['free_total']){
          unset($arrayQuery[$key]);
        }


      }

      if(count($arrayQuery)>0){
        $this->dadosConfig = $arrayQuery;
        $retorno = true ;
      }
    }

    return $retorno ;
  }

	public function getQuote($address, $pProduct = Array()) {

    $price = 0;
    if(sizeof($pProduct) > 0){
      foreach($pProduct as $prod){
        $price += $prod['price'];
      }
    }else{
      $price = $this->cart->getTotalSemFrete();
    }

    $this->setValidaDados($address['zone_id'], $price);

    if((isset($address['zone_id']) && ($address['zone_id']=='')) && (!$this->validaDados['permiteSemZoneId'])){
      return false;
    }

    if(!$this->getDadosConfig()){
        return false;
    }else{
      $this->language->load('shipping/free');

      $method_data = array();
    	$quote_data = array();

      foreach ($this->dadosConfig as $key => $value) {
        $quote_data[$value['free_titlefutura']] = array(
          'code'         => 'free.'.$value['free_titlefutura'],
          'title'        => (isset($value['free_titlefutura']) && ($value['free_titlefutura'])) ? $value['free_titlefutura'] : $this->language->get('text_description'),
          'cost'         => 0.00,
          'text'         => $this->currency->format(0.00),
          'exibir_frete_gratis_negrito' => $value['free_exibir_frete_gratis_negrito'] ?? '0',
        );
      }

  		$method_data = array(
    		'code'       => 'free',
    		'title'      => $this->language->get('text_title'),
    		'quote'      => $quote_data,
  	    'sort_order' => $this->config->get('free_sort_order'),
    		'error'      => false,
  		);
  		return $method_data;
    }
	}
}