#include"PreguntaSeleccionUnica.h"
#include<QDomElement>
#include<iostream>

PreguntaSeleccionUnica::PreguntaSeleccionUnica()
    :Pregunta("single_choice")
{
}

PreguntaSeleccionUnica::~PreguntaSeleccionUnica()
{
}

bool PreguntaSeleccionUnica::leerPregunta(const QDomElement& elementos){
    // Objeto QDomElement usado para almacenar donde comienzan las opciones de respuesta
    QDomElement elementoOpciones;
    //Evalua si se puede leer una pregunta completamente
    if(! Pregunta::leerPregunta(elementos)){ //Llama al metodo leerPregunta de la clase padre

        return false;

    }

    if(! encontrarOpciones(elementos, elementoOpciones)){

        return false;

    }
    //Este FOR recorre el arbol DOM entre los hijos de un mismo nivel (hermanos)
    //encontrando todas las opciones de respuesta de una pregunta y almacenandolas
    //en el vector opciones
    for(QDomNode hijo = elementoOpciones.firstChild(); ! hijo.isNull(); hijo = hijo.nextSibling()){

        QDomElement opcion = hijo.toElement();

        if(opcion.isNull()){

            continue;

        }

        if(opcion.tagName() == "option"){

            opciones.append(opcion.text());

        }

    }

    return true;

}

int PreguntaSeleccionUnica::aplicar(const QString& respuestaUsuario){

    bool ok;
    int respuestaPregunta = respuesta.toInt(&ok,10);

    if(respuestaUsuario == opciones[respuestaPregunta]){

        return 10;

    }else{

        return 0;

    }

}

QVector<QString> PreguntaSeleccionUnica::obtenerOpciones()const{

    return opciones;

}


bool PreguntaSeleccionUnica::encontrarOpciones(const QDomElement& elementos, QDomElement& elementoOpciones){
    //Este FOR recorre el arbol DOM entre los nodos de un mismo nivel (hermanos)
    //hasta encontrar donde comienzan las opciones de respuesta
    for(QDomNode nodo = elementos.firstChild(); ! nodo.isNull(); nodo = nodo.nextSibling()){

        elementoOpciones = nodo.toElement(); //Trata de converir a elemento el nodo

        if(elementoOpciones.isNull()){

            continue;

        }

        if(elementoOpciones.tagName() == "options"){

            return true;

        }

    }

    return false;

}
