<?php

include_once '../classes/relatorio.php';
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_WARNING);
ini_set('display_errors', '1');

class RelatorioGraficoRespostas extends Relatorio {

    public function __construct() {
        parent::checarPermissao(array('administrador', 'editarequipes', 'elaboradorquestoes'));
        parent::__construct();
        $this->tiposPermitidos = array('html', 'pdf');
    }
    
    public function filtro() {
        
        echo "<fieldset><legend>Filtro</legend>";
        echo "<table align='center'>";
        $prova_id = (isset($_REQUEST[prova_id]))? $_REQUEST[prova_id] : $_SESSION[prova_id];
        echo "<tr style='display:block'><td>";
        echo "Prova: ";parent::selectProva($prova_id, true, null, "1=1");
        echo "<th>Fase:</th><td>";parent::montaSelect('fase', array('1', '2', '3', '4', '5', '6'), $_REQUEST[fase]);echo "</td>";
        echo "</td></tr>";
        echo "<tr style='display:block;'>";
        echo "<th>Categoria:</th><td>";parent::selectCategoria($_REQUEST[categoria_id]);echo "</td>";
        echo "</tr>";
        echo "<tr style='display:block'><td>";
        echo "<th>Imprimir Descrição das Questões:</th><td>";parent::montaSelect('imprimirdescricao', array('SIM', 'NÃO'), $_REQUEST[imprimirdescricao]);echo "</td>";
        echo "</td></tr>";
        echo "</table>";
        echo "</fieldset>";
    }
    
    public function conteudo() {
        $bd = new BD();
        
        if($_REQUEST[tipo] != 'xls') echo "<h1>Gráficos das Respostas</h1>";
        
        $where[] = "1=1";
        if(!empty($_REQUEST[prova_id])) $where[] = "provafase.prova_id = '$_REQUEST[prova_id]'";
        if(!empty($_REQUEST[fase])) $where[] = "provafase.fase = '$_REQUEST[fase]'";
        if(!empty($_REQUEST[categoria_id])) $where[] = "questao.categoria_id = '$_REQUEST[categoria_id]'";
        $where = implode(' AND ', $where);
        
        $sql = "SELECT questao.*, provafase.fase
                FROM imediaco_geo.questao
                INNER JOIN imediaco_geo.provafase ON questao.provafase_id = provafase.id
                WHERE $where
                ORDER BY provafase.fase, questao.numero";
        $bd->executarSQL($sql);
//echo $sql."<br>";
        $i = 0;
        $fase = null;
        echo "<table align='center'>";
        while($obj = $bd->getObjeto()){
            if($fase != $obj->fase){
                $fase = $obj->fase;
                echo "<tr><th colspan='2'><h2>FASE $fase</h2></th></tr>";
            }
            echo "<tr>";
            echo "<td style='vertical-align:top'><b>$obj->numero</b></td>";
            $anulada = ($obj->status == 'ANULADA')? "<font color='red'><b>ANULADA</b></font><br/>" : null;
            $descricao = ($_REQUEST[imprimirdescricao] == 'SIM')? $obj->descricao : null;
            echo "<td>{$anulada}$descricao</td>";
            echo "</tr>";
            echo "<tr><td></td><td align='center'>";
            $this->respostas($obj);
            echo "</td></tr>";
            echo "<tr><td colspan='2'><br/><hr/><br/></td></tr>";
            $i++;
        }
        echo "</table>";
    }
    
    public function respostas($objquestao){
        $sql = "SELECT (CASE WHEN alternativa.correta = 1 THEN CONCAT(alternativa.letra, '*') ELSE alternativa.letra END) AS letra, COUNT(alternativa.id) AS quantidade 
                FROM imediaco_geo.resposta
                INNER JOIN imediaco_geo.alternativa ON resposta.alternativa_id = alternativa.id
                WHERE resposta.questao_id = '$objquestao->id'
                GROUP BY alternativa.letra, alternativa.correta
                ORDER BY COUNT(alternativa.id)";
        $this->bd->executarSQL($sql);
//echo $sql."<br>";
        $i = 0;
        $vetor = null;
        while($obj = $this->bd->getObjeto()){
            $vetor[] = array('letra'=>$obj->letra, 'quantidade'=>$obj->quantidade);
        }

        if(!empty($vetor)){
            echo "<div>";
            $quantidadetotal = 0;
            foreach ($vetor as $chave=>$elemento){
                $quantidadetotal += $elemento[quantidade];
            }
            $array = array();
            $chd = array();
            $chdl = array();
            foreach ($vetor as $chave=>$elemento){
//                $quantidadetotal += $elemento[quantidade];
                array_push($chd, $elemento[quantidade]);
                array_push($chdl, $elemento[letra]);
                $array[$elemento[letra]] = $elemento[quantidade].' - '.round(($elemento[quantidade]/$quantidadetotal * 100) * 1000)/1000 .'%';//no caso da url maior que 2048 esse $array sera impresso
            }
            $tipo = ($objquestao->tipo == 'checkbox')? 'bars' : 'pie';
//                print_r($array);echo "::$quantidadetotal<br>";
            $this->grafico($array, $tipo, $quantidadetotal, $chd, $chdl);

            echo "</div>";
        }
    }
    
    public function grafico($array, $tipo, $quantidadetotal, $chd, $chdl){
        $chdtext = implode('|', $chd);
        $chdltext = implode('|', $chdl);

        //verificando se a url nao eh maior que 2048. Caso seja imprime o resultado em forma de texto, senao gera o grafico
        if(strlen(urlencode("/olimpiadageografia/lib/geragrafico.php?tipo=$tipo&quantidadetotal=$quantidadetotal&chd=$chdtext&chdl=$chdltext")) > 2048)
            $this->imprimeArray($array);
        else
            echo "<img src='/olimpiadageografia/lib/geragrafico.php?tipo=$tipo&quantidadetotal=$quantidadetotal&chd=$chdtext&chdl=$chdltext' />";
    }

    private function imprimeArray($array, $maxElementos=null, $ordem='DESC'){
        echo "<br/>";
        if(!empty($maxElementos) AND $ordem == 'DESC') echo "Os $maxElementos registros com maior quantidade:<br/>";
        elseif(!empty($maxElementos) AND $ordem == 'ASC') echo "Os $maxElementos registros com menor quantidade:<br/>";
        elseif(!empty($maxElementos)) echo "$maxElementos registros:<br/>";
        switch($ordem){
            case 'DESC': arsort($array); break;
            case 'ASC': asort($array); break;
            case 'CHAVEDESC': krsort($array); break;
            case 'CHAVEASC': ksort($array); break;
            default: ksort($array); break;
        }
        
        $i=1;
        foreach ($array as $chave => $valor) {
            echo "$chave = $valor<br/>";
            if($i == $maxElementos) return;
            $i++;
        }
    }
    
}

$relatorio = new RelatorioGraficoRespostas();
$relatorio->montar();
