<?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",
                    "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 ($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 && $meio_pagamento == "BoletoBancario") {
                    $status_pagamento = 3;              //aguardando pagamento do boleto
                } else if ($cod_status == 1) {
                    $status_pagamento = 0;              //em processamento
                } 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 {
                    $status_pagamento = 0;
                }


                //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']);
                    }
                }
            }
        }
    }

}
