<?php

class RetornoPagamento_OPAY extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('Pagamento_Model');
        $this->load->model('Cadastro_Model');
        $this->load->database();
    }

    public function index() {
        if ($this->input->post('resposta')!=null) {
          
        //recebe dados da transação    
        $resposta = json_decode($this->input->post('resposta'));
        $transacao = $this->Pagamento_Model->recuperatransacao($resposta->pedido);
        
        if ($transacao!=null) {
        
        $aluno = $this->Cadastro_Model->getAlunoPorID($transacao['id_aluno']);
        $cod_status = $resposta->cod_status;
        $meio_pagamento_op = $resposta->meiopagamento;
        $cod_transacao = $resposta->transacao;
        
        
        
        //adequando o tipo de pagamento
        $meios_pagamento_cartao = array(
            "VISA",
            "MASTERCARD",
            "DINERS",
            "AMERICAN",
            "ELO",
            "AURA",
            "HIPERCARD",
            "HIPER",
            "JCB",
            "DISCOVER"
        );
        $meios_pagamento_debito = array(
            "BRADESCO",
            "MASTERCARD",
            "PEELA",
            "ITAU"
        );
        
        $meios_pagamento_saldo = array(
          "SALDO"
        );
        
        
        if (in_array($meio_pagamento_op, $meios_pagamento_cartao)) {
            $meio_pagamento = "CartaoDeCredito";
        } else if (in_array($meio_pagamento_op, $meios_pagamento_debito)) {
            $meio_pagamento = "DebitoBancario";
        } else if (in_array($meio_pagamento_op, $meios_pagamento_saldo)) {
            $meio_pagamento = "Saldo";
        } else if ($meio_pagamento_op == "BOLETO") {
            $meio_pagamento = "BoletoBancario";
        } else {
            $meio_pagamento = "outro";
        }
        
        /**
         *  0 – INICIADO
         *  1 – APROVADO/PAGO
         *  2 – EM PROCESSAMENTO/EM MONITORAMENTO
         *  3 – AGUARDANDO PAGAMENTO
         *  5 – CANCELADO/REPROVADO
         *  6 - EM CONTESTAÇÃO/EM RECUPERAÇÃO
         */
        
        //adequando o codigo de status
        if ($cod_status==1) {
            $status_pagamento = 3;              //aguardando pagamento do boleto
        } else if ($cod_status== 3||$cod_status == 4) {
            $status_pagamento = 1;              //pago         
        } else if ($cod_status== 7||$cod_status == 10) {
            $status_pagamento = 5;              //cancelado reprovado         
        } else if ($cod_status== 5||$cod_status == 6) {
            $status_pagamento = 6;              //em recuperação em contestação         
        } else if ($cod_status == 12) {
            $status_pagamento = 2;              //em recuperação em contestação         
        } 
        
        
        //atualiza transação no banco de dados
        $r_transacao_set = array(
            'situacao' => $status_pagamento, 
            'tipopagamento' => $meio_pagamento,
            'codigo'=>$cod_transacao    
                );
        $r_transacao_where = array(
            'id_transacao' => $transacao['id_transacao']);
        $this->Pagamento_Model->update($r_transacao_set, $r_transacao_where);
        
        
       
        //armazena log transação 
        $arr_log_transacao = array(
            'transacao'       =>  $transacao['id_transacao'],
            'email'           =>  $aluno['email'],
            'data'            =>  date('Y-m-d H:i:s'),
            'situacao'        =>  $status_pagamento,
            'pago'            =>  0      
        );
        
        //Insere log no banco de dados
        $this->Pagamento_Model->insert($arr_log_transacao);
        
        //Verificando se o pedido já não foi egistrado como pago
        $log_transacao = $this->Pagamento_Model->count_all_data(
                array(
            'transacao' => $transacao['id_transacao'], 
            'pago' => 1
                    ));
        $log = $log_transacao[0]->total;
        
        //se o codigo de pagamento estiver notificando pagamento
        if( ($cod_status == 3) && ($log == 0) ) {
            
            //insere log na banco de dados com registro de pagamento
            $arr_log_transacao = array(
            'transacao'       =>  $transacao['id_transacao'],
            'email'           =>  $aluno['email'],    
            'data'            =>  date('Y-m-d H:i:s'),
            'situacao'        =>  $status_pagamento,
            'pago'            =>  1
            );
            $this->Pagamento_Model->insert($arr_log_transacao);
            
            //atualiza transação
            $r_transacao_set = array(
                'situacao' => 1, 
                'tipopagamento' => $meio_pagamento);
            $r_transacao_where = array(
                'id_transacao' => $transacao['id_transacao']);
            $this->Pagamento_Model->update($r_transacao_set, $r_transacao_where);
            // LIBERA OS CERTIFICADOS PAGOS
            // VERIFICA SE JÁ EXISTE UM CERTIFICADO PARA A TRANSAÇÃO
            
            $verifica = $this->Pagamento_Model->verificacertificadopago($transacao['id_transacao']);
           
            if ($verifica == FALSE) {
            $this->Pagamento_Model->liberacertificado($transacao['id_transacao']);
            $this->Pagamento_Model->inserecertificado($transacao['id_transacao']);
            }
        }
        }
        } 
    }
 
}
