<?php

class ModelShippingFretefaixadecep extends Model
{

    private $quote_data = array();

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

        $this->load->helper('ftr_geral');
        $this->load->language('shipping/fretefaixadecep');
        $this->load->dmodel('shipping/fretefaixadecep');

        $data = array(
            'cep_status' => Type_Status::Tp_Habilitado
        );
        $faixaceps = $this->dmodel_shipping_fretefaixadecep->getFreteFaixadeCeps($data);

        if (count($faixaceps) > 0) {
            $totalprice = 0;

            if (sizeof($pProduct) <= 0) {
                $products = $this->cart->getProducts();
                $productsWeigth = $this->weight->format($this->cart->getWeight(), false, $this->language->get('decimal_point'), $this->language->get('thousand_point'));
                $totalprice = $this->cart->getTotalSemFrete();
            } else {
                $products = $pProduct;
                $productsWeigth = 0;

                foreach ($products as $product) {
                    $productsWeigth += $product['weight'];
                    $totalprice += $product['price'] * $product['quantity'];
                }

                $productsWeigth = $this->weight->format($productsWeigth, false, $this->language->get('decimal_point'), $this->language->get('thousand_point'));
            }

            foreach ($faixaceps as $faixacep) {
                $return = true;
                $faixacep['cep_valor_min'] = str_replace(',', '.', $faixacep['cep_valor_min']);

                if ($faixacep['produto_comp'] > 0) {
                    foreach ($products as $product) {
                        if (($product['length'] > $faixacep['produto_comp']) || ($product['width'] > $faixacep['produto_larg']) || ($product['height'] > $faixacep['produto_alt'])) {
                            $return = false;
                        }
                    }
                }

                if (isset($faixacep['produto_min_weight']) && ($faixacep['produto_min_weight'] >= 0)) {
                    $produto_min_weight = $this->weight->format($faixacep['produto_min_weight'], false, $this->language->get('decimal_point'), $this->language->get('thousand_point'));
                    $produto_max_weight = $this->weight->format($faixacep['produto_max_weight'], false, $this->language->get('decimal_point'), $this->language->get('thousand_point'));

                    if ((ftr_geral::removeMaskToDouble($productsWeigth) < ftr_geral::removeMaskToDouble($produto_min_weight)) || (ftr_geral::removeMaskToDouble($productsWeigth) > ftr_geral::removeMaskToDouble($produto_max_weight))) {
                        $return = false;
                    }

                }

                if (isset($faixacep['cep_valor_min']) && ($faixacep['cep_valor_min'] != '')) {
                    if ($totalprice < $faixacep['cep_valor_min']) {
                        $return = false;
                    }
                }


                if (isset($faixacep['cep_valor_type']) && ($faixacep['cep_valor_type'] == Type_Desconto::Tp_Porcentagem)) {
                    $faixacep['cep_valor'] = ($totalprice * ((float)str_replace(',', '.', $faixacep['cep_valor']) / 100));
                } else {
                    $faixacep['cep_valor'] = (float)str_replace(',', '.', $faixacep['cep_valor']);
                }

                if ($return) {
                    if ($address['postcode'] >= (int)str_replace('-', '', $faixacep['cep_inicial']) && $address['postcode'] <= (int)str_replace('-', '', $faixacep['cep_final'])) {
                        $this->setQuoteData($faixacep);
                    }
                }

            }

            $method_data = array(
                'code' => 'fretefaixadecep',
                'quote' => $this->quote_data,
                'sort_order' => $this->config->get('fretefaixadecep_sort_order'),
                'title' => ($this->config->get('fretefaixadecep_title')) ? $this->config->get('fretefaixadecep_title') : $this->language->get('text_title'),
                'error' => false
            );

            if ($this->quote_data) {
                return $method_data;
            }
        }


    }

    private function setQuoteData($faixacep)
    {
        $this->load->helper('ftr_geral');
        $index_faixa = ftr_geral::getStrToIndex($faixacep['cep_titulo']);

        $this->quote_data[$index_faixa] = array(
            'code' => 'fretefaixadecep.' . $index_faixa,
            'title' => ucfirst($faixacep['cep_titulo']),
            'cost' => round((float)$faixacep['cep_valor'], 2, PHP_ROUND_HALF_UP),
            'text' => 'Frete: ' . $this->currency->format($faixacep['cep_valor'])
        );

    }

}
