<?php

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

class Api extends CI_Controller {

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

    public function consumirsaldo() {

        $dados = array(
            'token' => $this->input->post('token'),
            'chave' => $this->input->post('chave'),
            'id_aluno' => $this->input->post('id_aluno'),
            'nome' => $this->input->post('nome'),
            'valor' => $this->input->post('valor'),
            'id_unico' => $this->input->post('id_unico'),
            'dispositivo' => $this->input->post('dispositivo'),
            'navegador' => $this->input->post('navegador')
        );
      
        $token = $dados['token'];
        $chave = $dados['chave'];
        $nome = $dados['nome'];
        $id_aluno = $dados['id_aluno'];
        $valor = $dados['valor'];
        $id_unico = $dados['id_unico'];
        
        $dispositivo = $dados['dispositivo'];
        $navegador = $dados['navegador'];
        $instituicao = $this->Api_Model->verificainstituicao($token, $chave, $nome);
        $aluno = $this->Api_Model->verificaAluno($id_aluno);

        $id_cliente = $aluno['id_cliente'];
        $id_negocio = $aluno['id_negocio'];
        $saldo = $aluno['saldo'];

        if (($dados['token'] != "" && $dados['chave'] != "" && $dados['id_aluno'] != "" && $dados['valor'] != "" && $dados['id_unico'] != "" || $dados['dispositivo'] != "" || $dados['navegador'] != "" && $dados['nome'] != "")) {
            //VERIFICO SE TODOS OS PARÂMETROS FORAM INFORMADOS CORRETAMENTE
            if ($instituicao != NULL) {
                //VERIFICO SE A INSTITUIÇÃO ESTÁ DEVIDAMENTE CADASTRADA E SE A SITUAÇÃO É IGUAL A 1
                    if ($aluno['situacao'] != 0) {
                        //VERIFICO SE O ALUNO ESTÁ DEVIDAMENTE LIBERADO PARA EXECUTAR ESSA MOVIMENTAÇÃO
                        if ($instituicao['id_instituicao'] == $aluno['instituicao']) {
                            //VERIFICO SE A INSTITUIÇÃO QUE O ALUNO ESTÁ CADASTRADO É A MESMA QUE ESTÁ REALIZANDO
                            //A REQUISIÇÃO
                            if (($valor) > $saldo) {
                                //VERIFICO SE O VALOR A SER CONSUMIDO É MAIOR QUE O SALDO DISPONÍVEL DO ALUNO
                                $resultado = array(
                                    'status' => 0,
                                    'mensagem' => 'ERRO 010: Saldo Insuficiente'
                                );

                                echo $json = json_encode($resultado);
                            } else {
                                $this->debita($id_aluno, $valor, $saldo, $id_cliente, $id_negocio, $dispositivo, $navegador, $id_unico, $nome);
                            }
                        } else {
                             $resultado = array(
                                    'status' => 0,
                                    'mensagem' => 'ERRO 018: O aluno nao está vinculado a esta instituicao'
                                );

                                echo $json = json_encode($resultado);
                        }
                    } else {
                        $resultado = array(
                            'status' => 0,
                            'mensagem' => 'ERRO 016: Aluno sem permissao'
                        );
                        echo $json = json_encode($resultado);
                    }
               
            } else {
                $resultado = array(
                    'status' => 0,
                    'mensagem' => 'ERRO 011: Instituicao sem permissao'
                );
                echo $json = json_encode($resultado);
            }
        } else {
            $resultado = array(
                'status' => 0,
                'mensagem' => 'ERRO 013: Um ou mais parametros nao foram informados'
            );
            echo $json = json_encode($resultado);
        }
    }

    public function debita($id_aluno, $valor, $saldo, $id_cliente, $id_negocio, $dispostivo, $navegador, $id_unico, $nome) {
      
        $this->transacao($id_unico, $id_cliente, $valor, $id_negocio);

        $transacaoCliente = $this->Api_Model->recuperatransacao($id_cliente);
        $valor_produto = $transacaoCliente['valor'];
        $id_transacao = $_SESSION['id_transacao'];
        
        $debito = $saldo - $valor_produto;
        $this->Api_Model->atualizaSaldoAnterior($saldo, $id_cliente); // ATUALIZA O SALDO ANTERIOR

        $iniciado = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Consumo de Saldo ', 'id_negocio_conta_origem' => $id_negocio, 'id_negocio_conta_destino' => $nome, 'valor' => $valor, 'saldo_conta_origem' => $saldo, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'INICIADO', 'dispositivo' => $dispostivo, 'ip' => $this->input->ip_address(), 'navegador' => $navegador);
        $ST_iniciado = $this->Api_Model->insere_transacao_transferencia($iniciado);

        $consumido = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Consumo de Saldo ', 'id_negocio_conta_origem' => $id_negocio, 'id_negocio_conta_destino' => $nome, 'valor' => $valor, 'saldo_conta_origem' => $debito, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'CONSUMIDO', 'dispositivo' => $dispostivo, 'ip' => $this->input->ip_address(), 'navegador' => $navegador);
        $ST_consumido = $this->Api_Model->insere_transacao_transferencia($consumido);

        $this->Api_Model->debitaSaldo($debito, $id_cliente);

        $concluido = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Consumo de Saldo ', 'id_negocio_conta_origem' => $id_negocio, 'id_negocio_conta_destino' => $nome, 'valor' => $valor, 'saldo_conta_origem' => $debito, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'CONCLUIDO', 'dispositivo' => $dispostivo, 'ip' => $this->input->ip_address(), 'navegador' => $navegador);
        $ST_concluido = $this->Api_Model->insere_transacao_transferencia($concluido);

        $data = $this->Api_Model->recuperatransacao_financeira($id_negocio);

        $aluno = $this->Api_Model->verificaAluno($id_aluno);
        $saldo_anterior = $aluno['saldo_anterior'];
        $novo_saldo = $aluno['saldo'];

        $resultado = array(
            'status' => 1,
            'mensagem' => 'Consumo de saldo com sucesso',
            'token' => $_SESSION['token']
        );

        echo $json = json_encode($resultado);
    }

    public function transacao($id_unico, $id_cliente, $valor, $id_negocio) {
        
        $token = strtoupper(substr(md5(uniqid() . $id_negocio . date('Y-m-d H:i:s')), 0, 20));
        $this->session->set_userdata("token", $token);
        $id_transacao = "NEG" . strtoupper(substr(md5(uniqid() . $id_negocio . date('Y-m-d H:i:s')), 0, 12));
        $this->session->set_userdata("id_transacao", $id_transacao);
        
        $this->Api_Model->transacao($id_transacao, $id_cliente, $id_unico); // INSIRO A TRANSAÇÃO NO BANCO
        $this->Api_Model->recuperatransacao($id_cliente);
        $this->Api_Model->obtem_transacao($id_cliente);
        $this->Api_Model->atualizatransacaoValor($valor, $id_cliente); // ATUALIZO O VALOR DA TRANSACAO
        $this->Api_Model->log_transacao($id_transacao, $token, $id_cliente);       // INSIRO O LOG_TRANSAÇÃO NO BANCO           
    }
    public function obtemsaldo() {
        
        $dados =  array('id_aluno' => $this->input->post('id_aluno'));
        $id_aluno = $dados['id_aluno'];
        
        $aluno = $this->Api_Model->verificaAluno($id_aluno);
        
        $id_cliente = $aluno['id_cliente'];
        
        $saldo = $this->Api_Model->obtemSaldo($id_cliente); 
        echo $json = json_encode($saldo);
    }
}
