#ifndef PREGUNTA_H
#define PREGUNTA_H

#include <iostream>
#include <string>
#include <vector>

class Pregunta
{
  protected:
	std::string tipo;
	std::string texto;
	std::string respuesta;

  public:
	Pregunta(const std::string& tipo);
	virtual ~Pregunta() { }
	virtual std::istream& leer(std::istream& in);
	virtual std::ostream& imprimir(std::ostream& out) const;
	/// Aplica la pregunta al jugador. ES decir, le hace la pregunta y espera la respuesta.
	/// Retorna la cantidad de puntos obtenidos por el jugador, lo cual depende de si
	/// contesto o no correctamente la pregunta.
	virtual int aplicar() const = 0;
};

// cin >> pregunta
inline std::istream& operator>>(std::istream& in, Pregunta& pregunta)
{
	return pregunta.leer(in);
}

// cout << pregunta
inline std::ostream& operator<<(std::ostream& out, const Pregunta& pregunta)
{
	return pregunta.imprimir(out);
}

#endif // PREGUNTA_H
