<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Pagamento extends CI_Controller {
    
    

    function __construct() {
        parent::__construct();
        $this->load->model('Pagamento_Model');
        $this->load->model('Saldo_Model');
        $this->load->model('Cadastro_Model');
        $this->load->model('Transferencia_Model');
        $this->load->database();
        $this->ci = & get_instance();
        $this->ci->load->config('url', TRUE);
    }

    public function pagamento() {
        if ($this->session->userdata('logado') == false) {
            redirect('base');
        } else {
           
            $dados = array('cliente' => $this->Cadastro_Model->verificaAluno(), 'parcelas' => $this->gera_parcela(), 'valores' => $this->Pagamento_Model->recuperavalor());
            $this->load->view('pagamento', $dados);
        }
    }

    /**
     * Funcao que executa a divisão das parcelas do valor
     */
     public function gera_parcela() {

        $transacaoCliente = $this->Pagamento_Model->recuperatransacao();
        $valor = $transacaoCliente['valor'];
       
        $MIN_VAL = 5;
        $NUM_PARCELAS = 12;
        $parcelas = array();

        for ($i = 1; $i <= $NUM_PARCELAS; $i++) {
            
            $valor_parcelado = $valor / $i;
            if ($valor_parcelado < $MIN_VAL) {
            break;
            } 
            $parcelas[] = $valor_parcelado;            
        }
       
        if (empty($parcelas)) {
        return FALSE;   
        }else {
        return $parcelas;
        }
    }
    
      public function dispositivo() {
        $mobile = FALSE;
        $user_agents = array("iPhone","iPad","Android","webOS","BlackBerry","iPod","Symbian","IsGeneric");

        foreach ($user_agents as $user_agent) {
            if (strpos($_SERVER['HTTP_USER_AGENT'], $user_agent) !== FALSE) {
                $mobile = TRUE;
                $modelo = $user_agent;
                break;
            }
        }

        if ($mobile) {
           return strtoupper($modelo);
        } else {
           $pc = 'Computador';
           return $pc;
        }
    }
    
    public function processapagamento() {
        
        $cpf = preg_replace('#[^0-9]#', '', $this->input->post('cpf'));
        $forma = $this->input->post('flagOpcaPagamento');

        $id_transacao = $_SESSION['id_transacao'];
        $transacaoCliente = $this->Pagamento_Model->recuperatransacao();  
       //RECUPERO OS DADOS DO CLIENTE NO BANCO DE DADOS
        $clienteTransacao = $this->Saldo_Model->cliente(); 
        if ( $forma == 'CartaoCredito' ) {
        $this->form_validation->set_rules('numero_cartao', 'Numero_cartao', 'trim|required|min_length[13]|max_length[19]', array('required' => 'O número do cartão está em branco', 'min_length' => 'Verifique o número do cartão', 'max_length' => 'Verifique o número do cartão'));
        $this->form_validation->set_rules('exp_cartao', 'Exp_cartao', 'trim|required|max_length[5]', array('required' => 'O validade do cartão está em branco', 'max_length' => 'Verifique validade do cartão'));
        $this->form_validation->set_rules('codigo_seguranca', 'Codigo_seguranca', 'trim|required|max_length[10]', array('required' => 'O código de seguranca do cartão está em branco', 'max_length' => 'Verifique o código de seguranca do cartão'));
        $this->form_validation->set_rules('nome_portador', 'Nome_portador', 'trim|required', array('required' => 'O nome do portador do cartão está em branco'));
        if ($this->form_validation->run() == FALSE) {
        
        $form = validation_errors('<div class="alert alert-warning " role="alert"><div class=""> <i class="fa fa-info-circle"></i> <span> ', ' </span> </div> </div>');
        $this->session->set_flashdata('erro-transacao', $form);
        redirect('pagamento');
            
        } else {    
        $nome = $clienteTransacao['nome'];
	$email = $clienteTransacao['email'];
	$telefone = $clienteTransacao['celular'];
	$endereco = $clienteTransacao['endereco'];
	$numero = $clienteTransacao['numero'];
	$cep = $clienteTransacao['cep'];
	$bairro = $clienteTransacao['bairro'];
	$cidade = $clienteTransacao['cidade'];
	$estado = $clienteTransacao['estado'];
	$ddd = $clienteTransacao['ddd_celular'];    
        
        $Forma= $this->input->post('forma');
	$cpf = preg_replace('#[^0-9]#', '', $this->input->post('cpf'));
	
	$Parcelas = ( $this->input->post('parcelas')  ) ? $this->input->post('parcelas') : '';
	$numerocartao = ( str_replace('-', '', $this->input->post('numero_cartao'))) ?  str_replace('-','',$this->input->post('numero_cartao')) : '';
        $NomePortador = ( $this->input->post('nome_portador') ) ?  $this->input->post('nome_portador') : '';
	$Expiracao =    ( $this->input->post('exp_cartao')  ) ?  $this->input->post('exp_cartao') : '';
	$CodigoSeguranca= ( $this->input->post('codigo_seguranca') ) ? $this->input->post('codigo_seguranca') : '';
        
        /* 	$Parcelas = 1;
	$Forma = $this->input->post('meiopagamento');
	$numerocartao = $this->input->post('CartaoNumero');
	$Expiracao = $this->input->post('Expiracao');
	$CodigoSeguranca = $this->input->post('CodigoSeguranca');
	$NomePortador = $this->input->post('NomePortador'); */
	if ($Expiracao == '') {
		$Expiracao = "00/00";
	}
	$ext = explode("/", $Expiracao);
	$mesvalidade = $ext[0];
	$anovalidade = $ext[1] + 2000;
	$va = $anovalidade . $mesvalidade;
	$agora = date('Y-m-d\TH:i:s');
	
        //$valor = 100;
	
        $valor = ($transacaoCliente['valor'])*100;
	
	$descricao = $transacaoCliente['tipo_transacao_movimentacao'];
	$id_transacao = $id_transacao;
	
	if ($Parcelas > 1) {
		$parcelamento = 2;
	}
	
	if ($Parcelas == 1) {
		$parcelamento = 1;
	}
	
	$string = <<<XML
<?xml version='1.0' encoding="ISO-8859-1"?>
<requisicao-transacao id='1030463848' versao='1.2.1'>
	 <dados-ec>
	        <numero>1030463848</numero>
	        <chave>28b92fc1ac9d6b9527af579a99ac03611791458416b43b0d24423ddafac68d24</chave>
	 </dados-ec>
	<dados-portador>
        <numero>$numerocartao</numero>
        <validade>$va</validade>
        <indicador>1</indicador>
        <codigo-seguranca>$CodigoSeguranca</codigo-seguranca>
    </dados-portador>
 <dados-pedido>
        <numero>$id_transacao</numero>
        <valor>$valor</valor>
        <moeda>986</moeda>
        <data-hora>$agora</data-hora>
        <descricao>$descricao</descricao>
        <idioma>PT</idioma>
        <soft-descriptor>Curso Online</soft-descriptor>
    </dados-pedido>
 	<forma-pagamento>
        <bandeira>$Forma</bandeira>
        <produto>$parcelamento</produto>
        <parcelas>$Parcelas</parcelas>
    </forma-pagamento>
 <url-retorno>null</url-retorno>
    <autorizar>3</autorizar>
    <capturar>true</capturar>
</requisicao-transacao>
XML;
	$url = 'https://ecommerce.cbmp.com.br/servicos/ecommwsec.do';
	
	$ch = curl_init();
	flush();
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, 'mensagem=' . $string);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_FAILONERROR, true);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
	curl_setopt($ch, CURLOPT_TIMEOUT, 40);
	$string = curl_exec($ch);
	
	curl_close($ch);
	
        $xml = simplexml_load_string($string);
        $pg = 0;
	if ($xml->tid) {
		$td = (String) $xml->tid; // TOKEN DO CARTÃO DE CRÉDITO 
		$cod_status = $xml->autorizacao->codigo;


		if ($cod_status == 5) {
			$cod_status_banco = 7;
                        $this->session->set_flashdata('erro-transacao', '<script> alertify.set("notifier","position", "top-center"); alertify.error("Transação não aprovada");</script>');
                        $dados = array('cliente' => $this->Cadastro_Model->verificaAluno(), 'parcelas' => $this->gera_parcela(), 'valores' => $this->Pagamento_Model->recuperavalor());
                        $this->load->view('pagamento', $dados);                                 
                }
		// SE SUCESSO 
		if ($cod_status == 4 || $cod_status == 6) {
                        $token = $xml->tid;
                        $transacao = $_SESSION['id_transacao'];
                        $this->Pagamento_Model->atualizatransacao($transacao);
                        $this->Pagamento_Model->log_transacao_cartao($token);
                        
                        $saldo_antigo = $this->Pagamento_Model->obtemSaldo();
                        $dinheiro =  $saldo_antigo['saldo'];
                        $valor = $transacaoCliente['valor'];
                        $saldo_novo = $valor  +  $dinheiro;
                        $id_negocio = $_SESSION['id_negocio'];
                        $this->Transferencia_Model->atualizaSaldoAnterior($dinheiro,$id_negocio); // ATUALIZA O SALDO ANTERIOR
                        $dados = array('id_transacao' => $id_transacao,'tipo_transacao_movimentacao' => 'Adição de Saldo','id_negocio_conta_origem' => $_SESSION['id_negocio'],'id_negocio_conta_destino' => $_SESSION['id_negocio'],'valor' => $transacaoCliente['valor'],'saldo_conta_origem' => $saldo_novo,'data' => date('Y-m-d H:i:s'),'status_operacao' => 'CONCLUIDO','dispositivo' => $this->dispositivo(),'ip' => $this->input->ip_address(),'navegador' => $this->agent->browser() . ' - ' . $this->agent->version());
                        $this->Transferencia_Model->insere_transacao_transferencia($dados);
                        $this->Pagamento_Model->atualizaSaldo($saldo_novo);
                        $this->session->set_flashdata('sucesso-transacao', '<script> alertify.set("notifier","position", "top-center"); alertify.success("Transação Aprovada com sucesso");</script>');

                        echo'<script> window.location ="saldo"</script>';
		}		
	}
     else{
      $this->session->set_flashdata('erro-transacao', '<script> alertify.set("notifier","position", "top-center"); alertify.error("Transação não aprovada");</script>');
      $dados = array('cliente' => $this->Cadastro_Model->verificaAluno(), 'parcelas' => $this->gera_parcela(), 'valores' => $this->Pagamento_Model->recuperavalor());
      $this->load->view('pagamento', $dados);  
    }
		//print_r($xml);
        }
        }
        else if ($forma == 'BoletoBancario' ||  $forma == 'Debito') {

        $nome = $clienteTransacao['nome'];
	$email = $clienteTransacao['email'];
	$telefone = $clienteTransacao['celular'];
	$endereco = $clienteTransacao['endereco'];
	$numero = $clienteTransacao['numero'];
	$cep = $clienteTransacao['cep'];
	$bairro = $clienteTransacao['bairro'];
	$cidade = $clienteTransacao['cidade'];
	$estado = $clienteTransacao['estado'];
	$ddd = $clienteTransacao['ddd_celular'];
        
	
	$cpf = preg_replace('#[^0-9]#', '', $this->input->post('cpf'));
        
        $this->form_validation->set_rules('cpf', 'cpf', 'trim|required|min_length[11]|max_length[14]', array('required' => 'O CPF está em branco', 'min_length' => 'Verifique o seu CPF', 'max_length' => 'Verifique o seu CPF'));
        if ($this->form_validation->run() == FALSE) {
        $form = validation_errors('<div class="alert alert-warning " role="alert"><div class=""> <i class="fa fa-info-circle"></i> <span> ', ' </span> </div> </div>');
        $this->session->set_flashdata('erro-cpf', $form);
        redirect('pagamento');    
        } else {
        $TelefoneFixo = $ddd.$telefone;
	
        $NomePortador = $this->input->post('nome-portador');//Nome Impresso no Cartão
	$numerocartao = $this->input->post('numerocartao');//Numero Impresso no Cartão
	$mesvalidade  = $this->input->post('mesvalidade');//Mês validade
	$anovalidade  = $this->input->post('anovalidade');//Ano Validade
	$CodigoSeguranca = $this->input->post('CodigoSeguranca');//Código de Segurança Impresso no Cartão
	
        
	$params['token_account'] = '32e9c1b008b07a0';     
	$params['customer[name]'] = $nome;
	$params['customer[cpf]'] = $cpf;
	$params['customer[email]'] = $email;
	$params['customer[contacts][][type_contact]'] = 'M';
	$params['customer[contacts][][number_contact]'] = $TelefoneFixo;
	
	$params['customer[addresses][][type_address]'] = 'B';
	$params['customer[addresses][][postal_code]'] =$cep;
	$params['customer[addresses][][street]'] = $endereco;
	$params['customer[addresses][][number]'] = $numero;
	$params['customer[addresses][][completion]'] = 'A';
	$params['customer[addresses][][neighborhood]'] =$bairro;
	$params['customer[addresses][][city]'] = $cidade;
	$params['customer[addresses][][state]'] =$estado;
	/* Dados da Transação */
	$params['transaction[available_payment_methods]'] = '2,3,4,5,6,7,14,15,16,18,19,21,22,23';
	$params['transaction[order_number]'] = $_SESSION['id_transacao'];
        $base = base_url();
	$params['transaction[customer_ip]'] =  $_SERVER["REMOTE_ADDR"];
	$params['transaction[url_notification]'] = $base.'retorno';
	
	/* Dados do Produto 1 - Notebook Preto */
	$params['transaction_product[][description]'] = $transacaoCliente['tipo_transacao_movimentacao'];
	$params['transaction_product[][quantity]'] = '1';
	$params['transaction_product[][price_unit]'] = $transacaoCliente['valor'];
       
	$params['transaction_product[][code]'] = '1';
	// $params['transaction_product[][sku_code]'] = '0001';
	$params['transaction_product[][extra]'] = '';
	
	/* Dados para Pagamento */
	$params['payment[payment_method_id]'] = $this->input->post('Forma');
	$params['payment[split]'] = '01';//quantidade de parcelas
	$params['payment[card_name]'] = $NomePortador;//Nome Impresso no Cartão
	$params['payment[card_number]'] =$numerocartao;//Numero Impresso no Cartão
	$params['payment[card_expdate_month]'] =$mesvalidade;//Mês validade
	$params['payment[card_expdate_year]'] =$anovalidade;//Ano Validade
	$params['payment[card_cvv]'] =$CodigoSeguranca;//Código de Segurança Impresso no Cartão
	

	$urlPost = "https://api.traycheckout.com.br/v2/transactions/pay_complete";
	
	ob_start();
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $urlPost);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt ($ch, CURLOPT_SSLVERSION, 6);
	//curl_setopt ($ch, CURLOPT_SSLVERSION,'CURL_SSLVERSION_TLSv1_2');
	curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
	curl_exec($ch);
	
	/* XML de retorno */
	$resposta = simplexml_load_string(ob_get_contents());
        
	ob_end_clean();
	curl_close($ch);
	
	if($resposta->message_response->message == "success"){
		//Tratamento dos dados de resposta da consulta.
		$link=$resposta->data_response->transaction->payment->url_payment;
		$token=$resposta->data_response->transaction->token_transaction;
		$this->Pagamento_Model->log_transacao_bole_deb($token);
		header("location: $link"); 
        } else {
            $message_complete = (array)$resposta->error_response->validation_errors->validation_error->message_complete;
            $message_complete = "Atenção: Houve um erro ao processar sua transação de pagamento,".$message_complete[0];
            $this->session->set_flashdata('erro-transacao', '<script> alertify.set("notifier","position", "top-center"); alertify.error("'.$message_complete.'");</script>');
	    redirect('pagamento');
        }        
      }
    }
  }
}
