<?php
//Hugo: 22/10/2015- comunica��o com webservice gera parcela pagseguro
/*include_once 'catalog/controller/payment/PagSeguroLibrary/PagSeguroLibrary.php';*/

class pagseguro
{

    public function __construct($registry)
    {
        $this->config = $registry->get('config');

        if (!$this->config->get('pagseguro_status')){
            return false;
        }

        $this->db = $registry->get('db');
        $this->session = $registry->get('session');
        $this->registry = $registry;
    }

    public function ConsultaParcela($url, $post = NULL, array $header = array())
    {

        try {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_URL, $url);

            if (count($header) > 0) {
                curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
            }

            if ($post !== null) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
            }

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_TIMEOUT, 300);
            $data = curl_exec($ch);
            $erro = curl_error($ch) . ' - Code: ' . curl_errno($ch);
            curl_close($ch);

            if ($data == 'Unauthorized') {
                $log = new Log('error.txt');
                $log->write('Erro de Autenticacao EMAIL/TOKEN do PagSeguro, validado no construtor do system/library/pagseguro; Necessario verificar as configuracoes do token e do email no modulo.');
                return false;
            } else {
                return $data;
            }

        } catch (Exception $e) {

        }
    }

    public function getFator()
    {
        if ($this->config->get('pagseguro_parcela')) {

            $user = $this->config->get('pagseguro_email');
            $token = $this->config->get('pagseguro_token');

            $bandeira = 'visa';
            $vlProduto = '1000.00';
            $request = 'https://ws.pagseguro.uol.com.br/v2/installments?email=' . $user . '&token=' . $token . '&amount=' . $vlProduto . '&cardBrand=' . $bandeira;


            $resultado = $this->ConsultaParcela($request);
            $resultado = simplexml_load_string($resultado);

            if ($resultado) {
                $fator = array();

                for ($i = 0; $i < sizeof($resultado); $i++) {
                    $fator[$i] = (strval($resultado->installment[$i]->amount) / $vlProduto);
                }

                $FatorPerfil = array();
                for ($i = 12; $i >= 1; $i--) {
                    $FatorPerfil[$i] = $fator;
                    array_pop($fator);
                }
                $FatorPerfil = serialize($FatorPerfil);

                return $FatorPerfil;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public function getPerfil($vlProduto)
    {
        if ($this->config->get('pagseguro_status')){

            $FatorPerfil = $this->getFator();

            if ($FatorPerfil){
                $FatorPerfil = unserialize($FatorPerfil);

                $vlmin = 4.9999; //4.99992 pq ele arredonda para 5

                for ($l = 11; $l >= 0; $l--) {
                    if (((float)$FatorPerfil[12][$l] * (float)$vlProduto) >= $vlmin) {
                        break;
                    } elseif (($l == 0) && ($vlProduto < $vlmin)) break;
                }
                return $FatorPerfil[$l + 1];
            } else {
                return false;
            }
        } else {
            return false;
        }

    }

    public function ConsultarPedidosAbandonados($url)
    {

        try {

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_URL, $url);

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_TIMEOUT, 300);
            $data = curl_exec($ch);
            $erro = curl_error($ch) . ' - Code: ' . curl_errno($ch);
            curl_close($ch);


            try{

                if ($data == 'Unauthorized') {
                    throw new Exception('Erro de Autenticacao EMAIL/TOKEN do PagSeguro, validado no construtor do system/library/pagseguro; Necessario verificar as configuracoes do token e do email no modulo.');
                } else {
                     return simplexml_load_string($data);
                }
            } catch (Exception $e){
                $this->log->write($data);
                throw $e;
            }

        } catch (Exception $e) {
            $this->log->write($e->getMessage());
            return false;
        }

    }
}
