<?php

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

class Transferencia extends CI_Controller {

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

    public function transferencia() {

        $saldo = $this->Pagamento_Model->obtemSaldo();
        $dinheiro = $saldo['saldo'];
        $cliente = $this->Saldo_Model->clienteNegocio();
        $id_negocio = $cliente['id_negocio'];
        $transacao_efetuada = $this->Transferencia_Model->verificaTransferenciaCliente();
       
        if ($transacao_efetuada != NULL) {
            if ($dinheiro == '0') {
                $this->session->set_flashdata('saldo-zero', '<script> alertify.set("notifier","position", "top-center"); alertify.error("Você está sem saldo para realizar essa movimentação");</script>');
                redirect('adicionarsaldo');
            } else {
                $dados = array('cliente' => $this->Cadastro_Model->verificaAluno(), 'saldos' => $this->Saldo_Model->saldo($id_negocio));
                $this->load->view('transferencia', $dados);
            }
        } else {
          
          $this->session->set_flashdata('nao-permetido', '<script> swal({position: "top-right",type: "warning",title: "Você precisa realizar um pagamento para executar esta operacao", showConfirmButton: false, timer: 2500});</script>');
          redirect('adicionarsaldo');  
        }
    }
    public function idnegocio($idnego) {
        $n_caracteres=strlen($idnego);
        for ($i = 0; $i < $n_caracteres; $i++) {
             $idnego[$i];
        } 
        if ($n_caracteres < 9 ) {
           $id_negoc =  @$idnego[0].@$idnego[1].@$idnego[2].@$idnego[3].'-'.@$idnego[4].@$idnego[5].@$idnego[6].@$idnego[07];
           return $id_negoc;
           
        } else {
          return $idnego;
        }
    }
    public function realizartransferencia() {

        $saldo = $this->input->post('valor', TRUE);
        $idnego = $this->input->post('idnegocio', TRUE);
        $idnegocio = $this->idnegocio($idnego); 
        $this->security->xss_clean($saldo);
        $valor = str_replace(array('.', ','), array('', '.'), $saldo);

        $this->form_validation->set_rules('valor', 'Valor', 'trim|required', array('required' => '<div class="alert alert-warning" role="alert"><span class="glyphicon glyphicon-exclamation-sign login-span"></span> O valor para transferir está em branco </div>'));
        $this->form_validation->set_rules('idnegocio', 'Idnegocio', 'trim|required|max_length[9]', array('required' => '<div class="alert alert-warning" role="alert"><span class="glyphicon glyphicon-exclamation-sign login-span"></span> O ID de Negócio está em branco </div>', 'max_length' => '<div class="alert alert-warning" role="alert"><span class="glyphicon glyphicon-exclamation-sign login-span"></span> Verifique o ID de Negócio </div>'));

        if ($this->form_validation->run() == FALSE) {
            $cliente = $this->Saldo_Model->clienteNegocio();
            $id_negocio = $cliente['id_negocio'];
            $dados = array('cliente' => $this->Cadastro_Model->verificaAluno(), 'saldos' => $this->Saldo_Model->saldo($id_negocio));
            $this->load->view('transferencia', $dados);
        } else {

            $transferencia = $this->Transferencia_Model->clienteNegocioTransferencia($idnegocio);
            $id = $transferencia['id_negocio'];
            $saldos = $this->Pagamento_Model->obtemSaldo();
            $dinheiro = $saldos['saldo'];
            $this->session->set_userdata("id_conta_destino", $idnegocio);

            $verifica = $this->Transferencia_Model->verificaTransferencia();
            $cont = $verifica['contador'];
            if ($cont > 2) {
                $this->session->set_flashdata('erro-limite', '<script> alertify.set("notifier","position", "top-center"); alertify.error("Você ultrapassou o limite de transferências para uma mesma conta");</script>');
                redirect('transferencia');
            } else if ($valor < 1.00) {
                $this->session->set_flashdata('erro-saldo', '<script> alertify.set("notifier","position", "top-center"); alertify.error("O valor informado não pode ser transferido");</script>');
                redirect('transferencia');
            } else if ($id == $_SESSION['id_negocio']) {
                $this->session->set_flashdata('erro-id-2', '<div class="alert alert-warning" role="alert"><span class="glyphicon glyphicon-exclamation-sign login-span"></span> Você não pode realizar uma auto-transferência</div>');
                redirect('transferencia');
            } else if ($id == NULL) {
                $this->session->set_flashdata('erro-id', '<script> alertify.set("notifier","position", "top-center"); alertify.error("O ID de Negócio informado não está cadastrado");</script>');
                redirect('transferencia');
            } else if (($valor) > $dinheiro) {
                $this->session->set_flashdata('erro-saldo-menor', '<script> alertify.set("notifier","position", "top-center"); alertify.error("Você não tem saldo suficiente para completar essa transação");</script>');
                redirect('adicionarsaldo');
            } else {
                $this->session->set_userdata("id_conta_destino", $idnegocio);
                $this->session->set_userdata("valor", $valor);
                $this->transacao();
                redirect('confirmacaotransferencia');
            }
        }
    }

    public function transacao() {
        $token = '';
        $id_transacao = "NEG" . strtoupper(substr(md5(uniqid() . $_SESSION['id_negocio'] . date('Y-m-d H:i:s')), 0, 12));
        $this->session->set_userdata("id_transacao", $id_transacao);
        $this->Transferencia_Model->transacao_transferencia($id_transacao); // INSIRO A TRANSAÇÃO NO BANCO
        $this->Pagamento_Model->atualizatransacaoValor(); // ATUALIZO O VALOR DA TRANSACAO
        $this->Pagamento_Model->log_transacao($id_transacao, $token);       // INSIRO O LOG_TRANSAÇÃO NO BANCO           
    }

    public function transacao_transferencia() {
        $saldo = $this->Pagamento_Model->obtemSaldo();
        $dinheiro = $saldo['saldo'];
        $transacao = $this->Pagamento_Model->recuperatransacao();
        $id_transacao = $transacao['id_transacao'];
        $contas = $this->Transferencia_Model->Transferenciacliente();
        $saldo_destino = $contas['saldo'];

        $dados = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Transferência de Saldo', 'id_negocio_conta_origem' => $_SESSION['id_negocio'], 'id_negocio_conta_destino' => $_SESSION['id_conta_destino'], 'valor' => $_SESSION['valor'], 'saldo_conta_origem' => $dinheiro, 'saldo_conta_destino' => $saldo_destino, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'EM ANDAMENTO', 'dispositivo' => $this->dispositivo(), 'ip' => $this->input->ip_address(), 'navegador' => $this->agent->browser() . ' - ' . $this->agent->version());

        $this->Transferencia_Model->insere_transacao_transferencia($dados);
    }

    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 confirmacaotransferencia() {

        $dados = array('cliente' => $this->Cadastro_Model->verificaAluno(), 'clientes' => $this->Saldo_Model->saldo(), 'contas' => $this->Transferencia_Model->clienteTransferencia());
        $this->load->view('confirmacaotransferencia', $dados);
    }

    public function confirmatransferencia() {

        $saldo = $this->Pagamento_Model->obtemSaldo(); //SALDO ATUAL DA CONTA-ORIGEM NO BANCO DE DADOS
        $dinheiro = $saldo['saldo'];
        $bonificacao = $saldo['bonificacao']; // BONIFICAÇÃO NO BANCO DE DADOS
        $transacao = $this->Pagamento_Model->recuperatransacao();
        $id_transacao = $transacao['id_transacao'];
        $contas = $this->Transferencia_Model->Transferenciacliente(); //SALDO ATUAL DA CONTA-DESTINO NO BANCO DE DADOS
        $saldo_destino = $contas['saldo'];
        $id_negocio =  $_SESSION['id_negocio'];
        $this->Transferencia_Model->atualizaSaldoAnterior($dinheiro, $id_negocio);
       
        //STATUS DA OPERAÇÃO - INICIADO
        $iniciado = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Transferência de Saldo', 'id_negocio_conta_origem' => $_SESSION['id_negocio'], 'id_negocio_conta_destino' => $_SESSION['id_conta_destino'], 'valor' => $_SESSION['valor'], 'saldo_conta_origem' => $dinheiro, 'saldo_conta_destino' => $saldo_destino, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'INICIADO', 'dispositivo' => $this->dispositivo(), 'ip' => $this->input->ip_address(), 'navegador' => $this->agent->browser() . ' - ' . $this->agent->version());
        $ST_iniciado = $this->Transferencia_Model->insere_transacao_transferencia($iniciado);

        //RECUPERO A TRNSAÇÃO NA TABELA AMN_CLIENTE_TRANSFERENCIA
        $transferencia = $this->Transferencia_Model->recuperatransacao_financeira();
        $valor_debito = $transferencia['valor']; //VALOR DEBITADO
        // DÉBITO DA CONTA-ORIGEM
        $debito = $dinheiro - $valor_debito;

        $this->Transferencia_Model->debitaSaldo($debito); //ATUALIZA O SALDO DA CONTA-ORIGEM COM O VALOR DEBITADO
        //FIM DO DÉBITO

        $saldo_debitado = $this->Pagamento_Model->obtemSaldo(); // RECUPERO O NOVO SALDO DA CONTA-ORIGEM (SALDO DEBITADO)
        $dinheiro_debitado = $saldo_debitado['saldo'];


        //STATUS DA OPERAÇÃO - DEBITADO - INSIRO O LOG COM O NOVO SALDO NA CONTA-ORIGEM 
        $debitado = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Transferência de Saldo', 'id_negocio_conta_origem' => $_SESSION['id_negocio'], 'id_negocio_conta_destino' => $_SESSION['id_conta_destino'], 'valor' => $_SESSION['valor'], 'saldo_conta_origem' => $dinheiro_debitado, 'saldo_conta_destino' => $saldo_destino, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'DEBITADO', 'dispositivo' => $this->dispositivo(), 'ip' => $this->input->ip_address(), 'navegador' => $this->agent->browser() . ' - ' . $this->agent->version());
        $ST_debitado = $this->Transferencia_Model->insere_transacao_transferencia($debitado);
        $novosaldo = $saldo_destino + $valor_debito;
        //CREDITA SALDO NA CONTA-DESTINO
        $this->Transferencia_Model->creditaSaldo($novosaldo);
        //FIM DO CRÉDITO 
        $conta_creditada = $this->Transferencia_Model->Transferenciacliente();
        $saldo_destino_creditada = $conta_creditada['saldo'];
        //STATUS DA OPERAÇÃO - DEBITADO
        $creditado = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Transferência de Saldo', 'id_negocio_conta_origem' => $_SESSION['id_negocio'], 'id_negocio_conta_destino' => $_SESSION['id_conta_destino'], 'valor' => $_SESSION['valor'], 'saldo_conta_origem' => $dinheiro_debitado, 'saldo_conta_destino' => $saldo_destino_creditada, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'CREDITADO', 'dispositivo' => $this->dispositivo(), 'ip' => $this->input->ip_address(), 'navegador' => $this->agent->browser() . ' - ' . $this->agent->version());
        $ST_creditado = $this->Transferencia_Model->insere_transacao_transferencia($creditado);
        //BONIFICAÇÃO NA CONTA-ORIGEM

        $bon = ( ($bonificacao / 100) * $valor_debito);

        $bonus = $dinheiro_debitado + $bon;

        $bonificado = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Transferência de Saldo', 'id_negocio_conta_origem' => $_SESSION['id_negocio'], 'id_negocio_conta_destino' => $_SESSION['id_conta_destino'], 'valor' => $_SESSION['valor'], 'saldo_conta_origem' => $dinheiro_debitado, 'saldo_conta_destino' => $saldo_destino_creditada, 'bonificacao' => $bon, 'data' => date('Y-m-d H:i:s'), 'status_operacao' => 'BONIFICADO', 'dispositivo' => $this->dispositivo(), 'ip' => $this->input->ip_address(), 'navegador' => $this->agent->browser() . ' - ' . $this->agent->version());
        $ST_bonificado = $this->Transferencia_Model->insere_transacao_transferencia($bonificado);
        //CREDITA BÔNUS NA CONTA-ORIGEM
        $this->Transferencia_Model->creditaBonus($bonus);
        //FIM DO CRÉDITO 
        $saldo_bonificado = $this->Pagamento_Model->obtemSaldo(); // RECUPERO O NOVO SALDO DA CONTA-ORIGEM (SALDO DEBITADO)
        $dinheiro_bonificado = $saldo_bonificado['saldo'];
        //STATUS DA OPERAÇÃO - CONCLUÍDO
        $concluido = array('id_transacao' => $id_transacao, 'tipo_transacao_movimentacao' => 'Transferência de Saldo', 'id_negocio_conta_origem' => $_SESSION['id_negocio'], 'id_negocio_conta_destino' => $_SESSION['id_conta_destino'], 'valor' => $_SESSION['valor'], 'saldo_conta_origem' => $dinheiro_bonificado, 'saldo_conta_destino' => $saldo_destino_creditada, 'bonificacao' => $bon, '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());
        $ST_concluido = $this->Transferencia_Model->insere_transacao_transferencia($concluido);

        $this->session->set_flashdata('saldo-transferido', '<script> swal({position: "top-right",type: "success",title: "Saldo Transferido com sucesso", showConfirmButton: false, timer: 3000});</script>');
        redirect('saldo');
    }

}
