<?php
include_once 'bd.php';

class Questao 
{
    public $bd;
    
    public $id;
    public $status;
    public $provafase_id;
    public $descricao;
    public $categoria_id;
    public $numero;
    public $peso;
    
    public $alternativas;//lista (array) de alternativas

    public function __construct() {
        $this->bd = new BD();
    }
    
    public function inserir(){
        $sql = "INSERT INTO imediaco_geo.questao (provafase_id, descricao, categoria_id, numero, peso)
                VALUES ('$this->provafase_id', '$this->descricao', '$this->categoria_id', '$this->numero', '$this->peso')";
        $executou = $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        if($executou){
            $sqlid = "SELECT id FROM imediaco_geo.questao ORDER BY id DESC LIMIT 1";
            $this->bd->executarSQL($sqlid);
            $objid = $this->bd->getObjeto();
            $this->id = $objid->id;
            //alternativas
            foreach($this->alternativas as $alternativa){
                $this->inserirAlternativa($alternativa);
            }
            $this->bd->log('inserir questao', $sql, null);
            return true;
        }else{
            $_SESSION[erro][] = "Erro ao inserir questao";
            return false;
        }
    }
    
    public function inserirAlternativa($alternativa){
        $sql = "INSERT INTO imediaco_geo.alternativa (questao_id, descricao, letra, correta)
                VALUES ('$this->id', '$alternativa->descricao', '$alternativa->letra', '$alternativa->correta')";
        $executou = $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        if($executou){
            $this->bd->log('inserir alternativa', $sql, null);
            return true;
        }else{
            $_SESSION[erro][] = "Erro ao inserir alternativa";
            return false;
        }
    }

    public function editar(){
        $sql = "UPDATE imediaco_geo.questao SET
                status = '$this->status'
                ,provafase_id = '$this->provafase_id'
                ,descricao = '$this->descricao'
                ,categoria_id = '$this->categoria_id'
                ,numero = '$this->numero'
                ,peso = '$this->peso'
                WHERE id = '$this->id'";
        $executou = $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        if($executou){
            //alternativas
            foreach($this->alternativas as $alternativa){
                $this->editarAlternativa($alternativa);
            }
            $this->bd->log('editar questao', $sql, null);
            return true;
        }else{
            $_SESSION[erro][] = "Erro ao editar questao";
            return false;
        }
    }

    public function editarAlternativa($alternativa){
        if(empty($alternativa->id)){
            $this->inserirAlternativa($alternativa);
        }else{
            $sql = "UPDATE imediaco_geo.alternativa SET
                    questao_id = '$this->id'
                    ,descricao = '$alternativa->descricao'
                    ,letra = '$alternativa->letra'
                    ,correta = '$alternativa->correta'
                    WHERE id = '$alternativa->id'";
            $executou = $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
            if($executou){
                $this->bd->log('editar questao', $sql, null);
                return true;
            }else{
                $_SESSION[erro][] = "Erro ao editar questao";
                return false;
            }
        }
    }
    
    public function excluir(){
        $sql = "DELETE FROM imediaco_geo.questao WHERE id = '$this->id'";
        $executou = $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        if($executou){
            $this->bd->log('excluir questao', $sql, null);
            return true;
        }else{
            unset($_SESSION[erro]);
            $sql = "UPDATE imediaco_geo.questao SET status = 'INATIVO' WHERE id = '$this->id'";
            $executou = $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
            if($executou){
                $this->bd->log('inativar questao', $sql, null);
                return true;
            }else{
                $_SESSION[erro][] = "Erro ao excluir questao";
                return false;
            }
        }
    }
    
    public function encontrar($id){
        $sql = "SELECT * FROM imediaco_geo.questao WHERE id = '$id'";
        $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        $obj = $this->bd->getObjeto();
        
        $this->id = $obj->id;
        $this->provafase_id = $obj->provafase_id;
        $this->descricao = $obj->descricao;
        $this->categoria_id = $obj->categoria_id;
        $this->numero = $obj->numero;
        $this->peso = $obj->peso;
        
        //alternativas
        $sql = "SELECT * FROM imediaco_geo.alternativa WHERE questao_id = '$id' ORDER BY letra";
        $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        $obj->alternativas = null;
        $tipo = 'texto';
        while($objalternativa = $this->bd->getObjeto()){
            $obj->alternativas[] = $objalternativa;
            if($objalternativa->letra == 'V') $tipo = 'falsoverdadeiro';
            else if($objalternativa->letra == 'A') $tipo = 'alternativaletra';
        }
        $obj->tipo = $tipo;
        
        return $obj;
    }
    
    public function encontrarAlternativas($questao_id){
        $sql = "SELECT * FROM imediaco_geo.alternativa WHERE questao_id = '$questao_id' ORDER BY letra";
        $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        $lista = null;
        while($objalternativa = $this->bd->getObjeto()){
            $lista[] = $objalternativa;
        }
        
        return $lista;
    }
    
    public function encontrarAlternativa($questao_id, $letra){
        $sql = "SELECT * FROM imediaco_geo.alternativa WHERE questao_id = '$questao_id' AND letra = '$letra'";
        $this->bd->executarSQL($this->bd->substituiVazioPorNull($sql));
        $obj = $this->bd->getObjeto();
        
        return $obj;
    }
}
