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

class FinalizacaoProva extends Pagina {
    
    public function __construct() {
        parent::checarPermissao(array('equipe'));
        parent::__construct();
    }
    
    public function corpo() {
        if($_REQUEST[acao] == 'reabrir'){
            $this->reabrir();
        }else{
            $this->confirmaFinalizacao();
        }
    }
    
    public function confirmaFinalizacao(){
        if(empty($_SESSION[equipe_id]) OR empty($_SESSION[provafase_id]) OR empty($_SESSION[datahorainicio])){
            echo "<div class='erro'>Sem sessão!</div>";
            echo "<meta http-equiv = 'Refresh' content = '10;URL=login.php' />Redirecionando para o login... <a href='login.php'>Clique aqui</a> caso não seja redirecionado.";
            exit();
        }
        
        $sessao = new Sessao();
        $sessao->encontrar($_SESSION[equipe_id], $_SESSION[provafase_id]);
        if(!empty($sessao->datahorafinalizacao)){
            $acao = 'pdf';
        }elseif($_REQUEST[executarFuncao] == 'pdf'){
            $acao = 'pdf';
        }elseif($_REQUEST[executarAcao] == 'finalizar'){
            $acao = 'finalizar';
        }else{
            $acao = null;
        }
        
        if($acao == 'pdf'){
            ob_start();
        }elseif($acao == 'finalizar'){
            echo "<div class='mensagem'>Prova Finalizada. Imprima essa página ou copie o número da equipe, a data-hora de finalização e o protocolo (no fim dessa página <a href='#comprovante'>clique aqui</a>) como seu comprovante.<br/><br/>";
            echo "<input type='button' value='Imprimir' class='imprimir' onclick=\"window.print();\" /> &nbsp;&nbsp; ";
//            echo "<input type='button' value='PDF' class='pdf' onclick=\"window.location=finalizacao.php?executarFuncao=pdf;\" />";
            echo "</div>";
        }else{
            echo "<div class='mensagem'>Reveja a sua prova e confirme o encerramento no final da página.</div>";
        }
        
        $questao = new Questao();
        $resposta = new Resposta();
        
        $sql = "SELECT prova.descricao AS prova, equipe.nome AS equipe FROM imediaco_geo.equipe INNER JOIN imediaco_geo.prova ON equipe.prova_id = prova.id WHERE equipe.id = '$_SESSION[equipe_id]'";
        $this->bd->executarSQL($sql);
        $obj = $this->bd->getObjeto();
        echo "<h1>$obj->prova</h1>";
        echo "<h2>$_SESSION[equipe_id] - $obj->equipe</h2>";
        
        $sql = "SELECT integranteequipe.* FROM imediaco_geo.integranteequipe WHERE integranteequipe.equipe_id = '$_SESSION[equipe_id]'";
        $this->bd->executarSQL($sql);
        while($obj = $this->bd->getObjeto()){
            echo "<h4>$obj->nome</h4>";
        }
        
        echo "<p>Início: ".parent::decodificarData($_SESSION[datahorainicio])."</p>";
        
        $sql = "SELECT questao.*, COALESCE(categoria.descricao, 'CATEGORIA ABERTA') AS categoria 
                FROM imediaco_geo.questao 
                LEFT JOIN imediaco_geo.categoria ON questao.categoria_id = categoria.id 
                WHERE questao.status = 'ATIVO' AND questao.provafase_id = '$_SESSION[provafase_id]'
                ORDER BY questao.numero, categoria.descricao, categoria.id, questao.numero";
        $this->bd->executarSQL($sql);
        $categoria_id = null;
        $gabarito = null;
        echo "<table>";
        $questoessemresposta = 0;
        while($objquestao = $this->bd->getObjeto()){
            if($categoria_id != $objquestao->categoria_id){
                echo "<tr><td colspan='2'><h3>$objquestao->categoria</h3></td></tr>";
                $categoria_id = $objquestao->categoria_id;
            }
            $numeroquestao = $this->formataNumeroQuestao($objquestao->numero);
            echo "<tr><td style='vertical-align: top;'><p><b>-</b> </p></td><td>$objquestao->descricao</td></tr>";
            echo "<tr><td colspan='2'><br/></td></tr>";
            $listaalternativas = $questao->encontrarAlternativas($objquestao->id);
            $marcada = false;
            
            foreach($listaalternativas as $alternativa){
                if($resposta->existe($_SESSION[equipe_id], $objquestao->id, $alternativa->id)){
                    $checked = "X(<ins><b><font color='blue'>$alternativa->letra</font></b></ins>)";
                    $gabarito[] = "$objquestao->numero-$alternativa->letra";
                    $marcada = true;
                    
                }else{
                    $checked = "(<font color='grey'>$alternativa->letra</font>)";
                }
                echo "<tr><td style='vertical-align: top;'><p class='linhasemquebra'>$checked</p></td><td>$alternativa->descricao</td></tr>";
                echo "<tr><td colspan='2'><br/></td></tr>";
            }
            if($objquestao->peso == 0){
                $marcada = true;
            }
            if(!$marcada){
                $questoessemresposta++;
                echo "<tr><td colspan='2'><div class='mensagemalerta'>Questão sem responsta!</div></td></tr>";
            }
            echo "<tr><td colspan='2'>";
            echo "<hr/>";
            echo "</td></tr>";
        }
        echo "</table>";
        
        if($acao == 'pdf'){
            echo "<br/><div align='center'>";
            if(!empty($sessao->datahorafinalizacao)){
                $this->comprovante($sessao);
            }else{
                echo "Essa prova não foi finalizada.";
            }
            echo "</div>";
            $html = ob_get_clean();
            echo $html;
        }elseif($acao == 'finalizar'){
            $sessao->datahorafinalizacao = date('Y-m-d H:i:s');
            $sessao->protocolo = md5("$_SESSION[equipe_id]:$sessao->datahorafinalizacao:" . implode(',', $gabarito));
            if(!empty($sessao->id)){
                $executou = $sessao->editar();
            }else{
                $executou = $sessao->inserir();  
            }
            if($executou){
                $this->comprovante($sessao);
            }
        }else{
            $this->botaoFinalizar($questoessemresposta);
        }
    }
    
    public function botaoFinalizar($questoessemresposta=0){
        $visibility = null;
        if($questoessemresposta > 0){
            $visibility = "visibility:hidden;";
            echo "<div class='mensagemalerta'>"
                . "ATENÇÃO: Existem $questoessemresposta questões que não foram respondidas!<br/>"
                . "<input type='checkbox' name='confirmamesmosemrespostas' value='SIM' required onclick=\"if(this.checked==true){document.getElementById('botaofinalizar').style.visibility='visible';}else{document.getElementById('botaofinalizar').style.visibility='hidden';}\" />Confirmo a finalização mesmo com questões sem responsta."
                . "</div>";
        }
        echo "<div style='text-align:center; background-color:#ffffcc;'>"
            . "<input type='button' class='aprovar' style='font-weight:bold; $visibility' id='botaofinalizar' value='Finalizar a Prova' onclick=\"if(confirm('Você confirma a finalização da prova?\\nATENÇÃO: Após confirmar não poderá voltar à prova')){window.location='finalizacao.php?executarAcao=finalizar';}\" />"
            . " &nbsp;&nbsp;&nbsp; <input type='button' class='cancelar' value='Cancelar e voltar para a prova' onclick=\"window.location='prova.php'\">"
            . "</div>";
    }
    
    public function comprovante($sessao){
        echo "<br/><div align='center'><a name='comprovante'></a>";
        echo "Número da Equipe: $sessao->equipe_id<br/>";
        echo "Data Hora de Finalização: " . parent::decodificarData($sessao->datahorafinalizacao, true) . "<br/>";
        echo "Protocolo: $sessao->protocolo";
        echo "</div>";
        
        echo "<p>Para ver os dados da equipe <a href='./administrativo/crudequipe.php?acao=editar&fechar=sim' target='_blank'>clique aqui</a></p>";
        
        echo "<p>Para reabrir a sua prova <a href='javascript:void(0)' onclick=\"if(confirm('Essa operação irá reabrir a sua prova excluindo o registro de data-hora e protocolo em que a mesma foi finalizada.\\nVocê confirma a operação?')){window.location='finalizacao.php?acao=reabrir';}\" >clique aqui</a></p>";
    }
    
    public function reabrir(){
        if(empty($_SESSION[equipe_id]) OR empty($_SESSION[provafase_id]) OR empty($_SESSION[datahorainicio])){
            echo "<div class='erro'>Sem sessão!</div>";
            echo "<meta http-equiv = 'Refresh' content = '10;URL=login.php' />Redirecionando para o login... <a href='login.php'>Clique aqui</a> caso não seja redirecionado.";
            exit();
        }
        
        $sessao = new Sessao();
        $executou = $sessao->reabrir($_SESSION[equipe_id], $_SESSION[provafase_id]);
        if($executou){
            echo "<div class='sucesso'>Prova reaberta!<br/>Você pode novamente entrar na prova (<a href='prova.php'>clique aqui</a>). </div>";
        }else{
            echo "<div class='erro'>ERRO ao reabrir a prova!<br/>Tente novamente.</div>";
        }
    }


    public function rodape(){
        echo "<footer>"
            . "<br/><div style='text-align:center;'>"
            . "<p>Olimpíada Brasileira de Geográfia</p>"
            . "</div>"
            . "</footer>";
        echo "</body>";
        echo "</html>";
    }
}

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