<?php

class LoginCadastro extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('Cadastro_Model');
        $this->load->model('Login', 'login');
        $this->load->model('Matricula_Model');
        $this->load->database();
    }

    public function login() {

        $dados = array('descricao' => 'O aluno pode realizar o seu login ou acesso no Amazônia Cursos','termos' => $this->Cadastro_Model->obtemTermo(), 'titulo' => 'Login', 'aluno' => $this->Cadastro_Model->aluno());
        $this->load->view('commons/login', $dados);
    }

    public function cadastro() {
        $dados = array('descricao' => 'O aluno pode realziar o seu cadastro no Amazônia Cursos','termos' => $this->Cadastro_Model->obtemTermo(), 'titulo' => 'Cadastro', 'aluno' => $this->Cadastro_Model->aluno());
        $this->load->view('commons/cadastro', $dados);
    }

    public function loginGoogleFacebook() {
        $token = $this->input->post('token');
        if ($this->input->post('tipo') == 'google') {
            $google = $this->login->loginGoogle($token);
            $aluno = $this->Cadastro_Model->getAlunoPorEmail($google->email);
        }

        if ($this->input->post('tipo') == 'facebook') {
            $aluno = $this->Cadastro_Model->getAlunoPorEmail($this->input->post('email'));
        }

        if (!empty($aluno)) {

            $this->login->auditoria($aluno);

            if ($aluno['situacao'] == 0) {
                $area_interesses = $this->Cadastro_Model->area_interesses();
                if (empty($area_interesses)) {
                    $this->session->set_userdata("controle-aluno", 1);
                } else {
                    $this->session->unset_userdata('controle-aluno');
                }
            }

            if (isset($_SESSION['matricula-aluno']) == FALSE) {
                $_SESSION['first_login'] = true;
                $data = array('situacao' => 'sucesso');
                echo json_encode($data);
            } else {
                $_SESSION['first_login'] = true;

                // SE FOR LOGIN NORMAL COM MATRÍCULA REALIZO A MATRÍCULA DO ALUNO APÓS O LOGIN E REDIRECIONO PARA [CURSOS MATRICULADOS]
                $id_curso = $_SESSION['matricula-aluno']['id_curso'];

                $data = array('situacao' => 'sucesso-matricula');
                $id_aluno = $aluno['id_aluno'];
                $hash = $this->Matricula_Model->gera_hash();
                $aut = $this->Matricula_Model->gera_autenticacao($hash);
                $verificamat = $this->Matricula_Model->obtemCursoMatriculadoporID($id_curso);
                $con = $this->Matricula_Model->obtemCursoConcluido($id_curso);
                $concluido = $con['concluido'];
                $this->verificamatricula($verificamat, $id_aluno, $aut, $concluido);
            }
        } else {

            if ($this->input->post('tipo') == 'facebook') {

                $dados = [
                    'nome' => $this->input->post('nome'),
                    'email' => $this->input->post('email'),
                    'senha' => $this->Cadastro_Model->codifica($this->gera_aleatorio(6))
                ];

                $this->doCadastro($dados);
            }

            if ($this->input->post('tipo') == 'google') {

                $token = $this->input->post('token');
                $google = $this->login->loginGoogle($token);

                $dados = [
                    'nome' => $google->name,
                    'email' => $google->email,
                    'senha' => $this->Cadastro_Model->codifica($this->gera_aleatorio(6))
                ];

                $this->doCadastro($dados);
            }
        }
    }

    public function doCadastro($resp) {
        // INSERIR ALUNO NO BD


        $dados = array('nome' => mb_strtoupper($resp['nome']), 'email' => mb_strtolower($resp['email']), 'senha' => $resp['senha'], 'bloqueado' => 0, 'id_revendedor' => 0, 'ultimo_curso' => 0, 'data_vencimento' => date("Y-m-d"), 'ultimo_historico' => 0, 'qtd_cursos' => 0, 'situacao' => 0);
        $this->Cadastro_Model->inserirAluno($dados);

        $aluno = $this->Cadastro_Model->getLoginAluno($resp['email'], $resp['senha']);

        // MENSAGEM COM OS DADOS PARA O ACESSO AO SISTEMA

        $this->cadastrar_cpe(0,mb_strtolower($resp['email']));

        $this->enviaemail($aluno, $this->Cadastro_Model->decodifica($resp['senha']));

        // AUDITORIA
        $this->login->auditoria($aluno);

        // SE FOR CADASTRO SEM MÁTRICULA - VIEW AFINIDADE
        if (isset($_SESSION['matricula-aluno']) == FALSE) {
            $data = array('situacao' => 'sucesso-cadastro');
            echo json_encode($data);
        } else {
            // REALIZO A MATRÍCULA DO ALUNO APÓS O CADASTRO E REDIRECIONO PARA [CURSOS MATRICULADOS]
            $data = array('situacao' => 'sucesso-matricula');
            $id_aluno = $aluno['id_aluno'];
            $hash = $this->Matricula_Model->gera_hash();
            $aut = $this->Matricula_Model->gera_autenticacao($hash);
            $this->Matricula_Model->realizamatricula($id_aluno, $aut);
            echo json_encode($data);
        }
    }

    public function verificamatricula($verificamat, $id_aluno, $aut, $concluido) {

        if ($verificamat == NULL) {
            $this->Matricula_Model->realizamatricula($id_aluno, $aut);
            $data = array('situacao' => 'sucesso-matricula');
            echo json_encode($data);
        } else if ($concluido == 1 || $concluido == 2) {
            $this->Matricula_Model->realizamatricula($id_aluno, $aut);
            $data = array('situacao' => 'sucesso-matricula');
            echo json_encode($data);
        } else {
            $this->session->set_flashdata('matriculado-l-erro', ' <div class="alert alert-warning " role="alert"><i class="fa fa-exclamation-triangle"></i>     Você já possui esse curso, para se matricular novamente é necessário concluir ou cancelar o mesmo</div>');
            $data = array('situacao' => 'matriculado-l-erro');
            echo json_encode($data);
        }
    }

    private function cadastrar_cpe($market, $email){
      $url_central_preferencia_notiticacoes = URL_API_IRIS . 'cliente/atualizar_preferencias/';
      $intervalo = $market;
      $post_central_preferencia_notiticacoes = array(
          'token' => OPAYT_TOKEN,
          'chave' => OPAYT_CHAVE,
          'id_unico' => md5($email),
          'intervalo_sms' => $intervalo,
          'intervalo_email' => $intervalo,
          'intervalo_push' => $intervalo,
          'informativo' => $intervalo,
          'promocional' => $intervalo,
      );
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url_central_preferencia_notiticacoes);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_central_preferencia_notiticacoes);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
      $resultado = curl_exec($ch);
      $this->load->helper('file');
      $debug1 = var_export($resultado, true);
      write_file(APPPATH.'/logs/logCPE.txt', "\n------------------------------------\n$email : $market\n$debug1\n------------------------------------\n", 'a+');
      curl_close($ch);
    }

    private function gera_aleatorio($tamanho) {
        $tamanho = $tamanho;
        $maiusculas = true;
        $numeros = true;
        $simbolos = false;

        // Caracteres de cada tipo
        $lmin = 'abcdefghijklmnopqrstuvwxyz';

        $lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $num = '1234567890';
        $simb = '!@#$%*-';

        // Variáveis internas
        $retorno = '';
        $caracteres = '';
        // Agrupamos todos os caracteres que poderão ser utilizados
        //$caracteres .= $lmin;
        if ($maiusculas)
            $caracteres .= $lmai;
        if ($numeros)
            $caracteres .= $num;
        if ($simbolos)
            $caracteres .= $simb;
// Calculamos o total de caracteres possíveis
        $len = strlen($caracteres);
        for ($n = 1; $n <= $tamanho; $n++) {
// Criamos um número aleatório de 1 até $len para pegar um dos caracteres
            $rand = mt_rand(1, $len);
// Concatenamos um dos caracteres na variável $retorno
            $retorno .= $caracteres[$rand - 1];
        }


        return $retorno;
    }

    private function enviaemail($aluno, $senha) {
        $this->load->library('template');
        $Subject = "Cadastro no Amazônia Cursos";
        $nome = $aluno['nome'];
        $email = $aluno['email'];

        $Body = $this->template->cadastro($nome, $email, $senha);
        $this->Cadastro_Model->email($Subject, $Body, $email);
    }

}
