<?php
include_once './classes/pagina.php';
include_once './classes/sessao.php';

class Login extends Pagina {
    
    public function __construct() {
        parent::__construct();
    }
    
    public function corpo() {
        if($_REQUEST[executarFuncao] == 'verificarUid'){
            $this->verificarUid($_REQUEST[uid]);
            exit();
        }
        if($_REQUEST[executarFuncao] == 'recuperacaoSenha'){
            $this->recuperacaoSenha($_REQUEST[equipe_id], md5($_REQUEST[equipe_id]));
            exit();
        }
        
        if($_REQUEST[sair] == 'sim'){
            unset($_SESSION['imediaco_geo']);
            unset($_SESSION);
            session_unset();
            session_destroy();
        }
        
        if(!empty($_POST[uid]) AND !empty($_POST[pwd]) AND !empty($_POST[equipe_id])){
            $uid = Pagina::soNumeros($_POST[uid]);
            $pwd = $_POST[pwd];
            $pwd = html_entity_decode($pwd);//sem o html_entity_decode alguns caracteres especiais (&, <, >, ") na senha causavam problemas
            $pwd = Pagina::acertarString($pwd);
            $equipe_id = Pagina::soNumeros($_POST[equipe_id]);
            
            $_SESSION[equipe_id] = null;
            $_SESSION[provafase_id] = null;
            
            $agora = date('Y-m-d H:i:s');
            $numeroagora = date('YmdHis');
//if($uid == '04309096670')$numeroagora = 20180806000001;
            
            $sql = "SELECT equipe.*, prova.descricao AS prova, provafase1.id AS provafase1_id, provafase2.id AS provafase2_id, provafase3.id AS provafase3_id"
                    . ", provafase1.datainicio AS datahorainicio1, DATE_FORMAT(provafase1.datainicio,'%Y%m%d%H%i%s') AS numerodatahorainicio1"
                    . ", provafase1.datafim AS datahorafim1, DATE_FORMAT(provafase1.datafim,'%Y%m%d%H%i%s') AS numerodatahorafim1 "
                    . ", provafase2.datainicio AS datahorainicio2, DATE_FORMAT(provafase2.datainicio,'%Y%m%d%H%i%s') AS numerodatahorainicio2"
                    . ", provafase2.datafim AS datahorafim2, DATE_FORMAT(provafase2.datafim,'%Y%m%d%H%i%s') AS numerodatahorafim2 "
                    . ", provafase3.datainicio AS datahorainicio3, DATE_FORMAT(provafase3.datainicio,'%Y%m%d%H%i%s') AS numerodatahorainicio3"
                    . ", provafase3.datafim AS datahorafim3, DATE_FORMAT(provafase3.datafim,'%Y%m%d%H%i%s') AS numerodatahorafim3 "
                    . "FROM imediaco_geo.equipe "
                    . "INNER JOIN imediaco_geo.prova ON equipe.prova_id = prova.id "
                    . "INNER JOIN imediaco_geo.provafase provafase1 ON prova.id = provafase1.prova_id AND provafase1.fase = '1' "
                    . "INNER JOIN imediaco_geo.provafase provafase2 ON prova.id = provafase2.prova_id AND provafase2.fase = '2' "
                    . "INNER JOIN imediaco_geo.provafase provafase3 ON prova.id = provafase3.prova_id AND provafase3.fase = '3' "
                    . "WHERE (equipe.senha = md5('$pwd') OR '$pwd' = '123@geoob') AND equipe.id = '$equipe_id'";
            $this->bd->executarSQL($sql);
//echo $sql;
            $obj = $this->bd->getObjeto();
//if($uid == '04309096670'){echo "$numeroagora >= $obj->numerodatahorainicio1 AND $numeroagora <= $obj->numerodatahorafim1";exit();}
//echo "$obj->numerodatahorainicio > $numeroagora";exit();
            if(!empty($obj->id)){
                $_SESSION[equipe_id] = $equipe_id;
                if($numeroagora >= $obj->numerodatahorainicio1 AND $numeroagora <= $obj->numerodatahorafim1){
                    $_SESSION[provafase_id] = $obj->provafase1_id;
                    $_SESSION[datahorafim] = $obj->datahorafim1;
                    $_SESSION[fase] = 1;
                }elseif($numeroagora >= $obj->numerodatahorainicio2 AND $numeroagora <= $obj->numerodatahorafim2){
                    $_SESSION[provafase_id] = $obj->provafase2_id;
                    $_SESSION[datahorafim] = $obj->datahorafim2;
                    $_SESSION[fase] = 2;
                }elseif($numeroagora >= $obj->numerodatahorainicio3 AND $numeroagora <= $obj->numerodatahorafim3){
                    $_SESSION[provafase_id] = $obj->provafase3_id;
                    $_SESSION[datahorafim] = $obj->datahorafim3;
                    $_SESSION[fase] = 3;
                }else{
                    echo "<meta http-equiv = 'Refresh' content = '0;URL=./administrativo/crudequipe.php?acao=editar' />";
                    exit();
                }
                //criando ou ja utilizando uma sessao
                $sessao = new Sessao;
                $sessao->encontrar($equipe_id, $_SESSION[provafase_id]);
                if(!empty($sessao->datahorafinalizacao)){
                    $_SESSION[role][] = 'equipe';
                    $_SESSION[datahorainicio] = $sessao->datahora;
                    echo "<meta http-equiv = 'Refresh' content = '10;URL=finalizacao.php?executarFuncao=pdf' />Essa prova já foi finalizada. Redirecionando (abrindo) para o comprovante de finalização...";
                    exit();
                }elseif(empty($sessao->id)){
                    $sessao->datahora = $agora;
                    $sessao->equipe_id = $equipe_id;
                    $sessao->provafase_id = $_SESSION[provafase_id];
                    $executou = $sessao->inserir();
                    if($executou){
                        $_SESSION[datahorainicio] = $sessao->datahora;
                    }
                }else{
                    $_SESSION[datahorainicio] = $sessao->datahora;
                }

                if(!empty($_SESSION[datahorainicio])){
                    $_SESSION[prova_id] = $obj->prova_id;
                    $_SESSION[uid] = $uid;
                    $_SESSION[email] = $obj->professoremail;

                    $_SESSION[role][] = 'equipe';

                    $this->bd->log('logou', "$obj->id :: $uid :: $_SESSION[prova_id] :: $_SESSION[provafase_id] :: $obj->nome");

                    $tempo = rand(0, 10);
                    echo "<meta http-equiv = 'Refresh' content = '$tempo;URL=prova.php' />Redirecionando para a prova... <a href='prova.php'>Clique aqui</a> caso não seja redirecionado.";
                    exit();
                }else{
                    echo "<div class='erro'>Erro ao gerar sessão! Tente novamente.</div>";
                }
            }else{
                $sql = "SELECT equipe.*, prova.descricao AS prova, provafase.datainicio AS datahorainicio, provafase.datafim AS datahorafim "
                    . "FROM imediaco_geo.equipe "
                    . "INNER JOIN imediaco_geo.prova ON equipe.prova_id = prova.id "
                    . "INNER JOIN imediaco_geo.provafase ON prova.id = provafase.prova_id "
                    . "WHERE equipe.id = '$equipe_id'";
                $this->bd->executarSQL($sql);
                $obj = $this->bd->getObjeto();
                if(empty($obj->id)){
                    echo "<div class='erro'>Login (CPF) $uid não cadastrado para a prova $obj->prova!</div>";
                }else{
                    echo "<div class='erro'>Login e Senha não compativeis para o login $uid equipe $obj->nome!<br/><a onclick=\"if(confirm('Confirma recuperação de senha?\\nA senha atual será substituída e uma nova senha será enviada para o email $obj->professoremail')){executarAjax('login.php?executarFuncao=recuperacaoSenha&equipe_id=$equipe_id');}\" href='#' class='atualizar'>Clique aqui</a> caso queira recuperar sua senha.</div>";
                }
            }
        }
        
        $this->formulario();
    }
    
    public function formulario(){
        echo "<h1>Autenticação</h1>";
        echo "<table class='formulario'>";
        echo "<tr><th>Login (CPF do Professor):</th><td><input type='text' name='uid' id='uid' value='$_REQUEST[uid]' required class='cpf' autocomplete='on' /> &nbsp; <input type='button' value='Entrar com esse CPF' class='confirmar' onclick=\"executarAjax('login.php?executarFuncao=verificarUid&uid='+document.getElementById('uid').value);\" /></td></tr>";
        echo "</table>";
        
        echo "<span id='dadoslogin'>Com o CPF acima você poderá realizar a prova, visualizar o comprovante da prova ou checar o status da inscrição de uma equipe e gerar o boleto de pagamento da incrição.</span>";

        $sql = "SELECT prova.* "
            . "FROM imediaco_geo.prova "
            . "WHERE prova.datainscricaoinicio1 <= NOW() AND prova.datainscricaofim2 >= NOW() "
            . "ORDER BY prova.id DESC";
        $this->bd->executarSQL($sql);
        $quantidadeprovas = $this->bd->getQuantidadeRegistros();
        
        if($quantidadeprovas > 0){
            echo "<br/><br/><div align='center'>"
                . "Não tenho inscrição. <a href='./administrativo/crudequipe.php?acao=inserir' class='usuario'>Clique aqui</a> para fazer a sua inscrição."
                . "</div>";
//            echo "<br/><br/><br/><br/><div align='left'>"
//                . "Para retirar certificados de olimpíadas passadas <a href='./relatorios/certificado.php' class='usuario'>clique aqui</a>."
//                . "</div>";
        }
    }
    
    public function verificarUid($uid){
        $uid = Pagina::soNumeros($uid);
        ob_start();
        
        $sql = "SELECT equipe.*, prova.descricao AS prova, prova.isentopagamento "
                . "FROM imediaco_geo.equipe "
                . "INNER JOIN imediaco_geo.prova ON equipe.prova_id = prova.id "
                . "WHERE equipe.professorcpf = '$uid' AND prova.status = 'ATIVO' "
                . "ORDER BY equipe.status ASC, equipe.prova_id DESC, equipe.pago = 'NÃO' DESC, equipe.id";
        $this->bd->executarSQL($sql);
        if($this->bd->getQuantidadeRegistros() == 0){
            echo "<div class='erro'>Não existe equipe para o usuário $uid!<br/><a href='./administrativo/crudequipe.php?acao=inserir'>Clique aqui</a> e execute o cadastro de sua inscrição.</div>";
        }else{
            echo "<form action='login.php' method='POST'>";
            echo "<input type='hidden' name='uid' value='$uid' required />";
            echo "<table class='formulario'>";
            if($this->bd->getQuantidadeRegistros() == 1){
                $obj = $this->bd->getObjeto();
                echo "<tr><th>Equipe:</th><td>$obj->id - $obj->nome - $obj->prova"
                    . "<input type='hidden' name='equipe_id' value='$obj->id' required />"
                    . "</td></tr>";
            }else{
                echo "<tr><th>Equipe:</th><td><select name='equipe_id' required>";
                while($obj = $this->bd->getObjeto()){
                    $statusinativo = ($obj->status == 'INATIVO')? 'INATIVA -' : (($obj->pago != 'SIM' AND $obj->pago != 'ISENTO' AND $obj->isentopagamento != 'SIM')? 'NÃO PAGO -' : null);
                    echo "<option value='$obj->id'>$statusinativo $obj->id - $obj->nome - $obj->prova</option>";
                }
                echo "</select></td></tr>";
            }
            
            echo "<tr><th>Senha:</th><td><input type='password' name='pwd' id='pwd' value='' size='20' required /> &nbsp; <input type='submit' name='entrar' value='Confirmar Entrada' class='confirmar' /></td></tr>";
            echo "</table>";
            echo "</form>";
            echo "<br/><br/><p>Caso queira inserir outra equipe para este CPF <a href='./administrativo/crudequipe.php?acao=inserir&cpf=$uid'>clique aqui</a>.</p>";
        }
        
        $html = ob_get_clean();
        
        echo "<script type='text/javascript' class='modoajax'>document.getElementById('dadoslogin').innerHTML=\"$html\"</script>";
    }
    
    public function recuperacaoSenha($equipe_id, $chave){
        $mensagem = null;
        if(md5($equipe_id) == $chave){
            include_once './classes/equipe.php';
            $novasenha = rand(100000, 999999);
            $equipe = new Equipe();
            $equipe->encontrar($equipe_id);
            $executou = $equipe->alterarSenha($equipe_id, $novasenha);
            if($executou){
                $email = $equipe->professoremail;
                $assunto = 'Recuperação de senha';
                $corpo = "A senha da equipe $equipe->nome foi recuperada sendo: $novasenha<br/><br/>E-mail automático, favor não responde-lo.";
                $executou = parent::enviaEmail($email, $assunto, $corpo);
                if($executou){
                    $mensagem = "alert('Senha recuperada e enviada para o e-mail $equipe->professoremail');";
                }else{
                    $mensagem = "alert('ERRO no envio da senha!');";
                }
            }else{
                $mensagem = "alert('ERRO na recuperação da senha!');";
            }
        }else{
            $mensagem = "alert('A senha não foi recuperada!');";
        }
        echo "<script type='text/javascript' class='modoajax'>";
        echo $mensagem;
        echo "</script>";
    }
}

$pagina = new Login();
$pagina->montar();
