#ifndef CVVISUAL_MATCH_VIEW_HPP
#define CVVISUAL_MATCH_VIEW_HPP

#include <QString>
#include <QWidget>
#include <vector>

#include <opencv2/core.hpp>
#include <opencv2/features.hpp>

#include "../impl/match_call.hpp"

namespace cvv
{
namespace view
{

/**
 * @brief interface over visualizations of match operations.
 */
class MatchView : public QWidget
{
	Q_OBJECT

signals:

	/**
	 * @brief update left Footer.
	 * Signal to update the left side of the footer with newText.
	 * @param newText to update the footer with.
	 */
	void updateLeftFooter(QString newText);

	/**
	 * @brief update right Footer.
	 * Signal to update the right side of the footer with newText.
	 * @param newText to update the footer with.
	 */
	void updateRightFoooter(QString newText);

      public:
	/**
	 * @brief default constructor
	 */
	MatchView() : MatchView{ 0 }
	{
	}

	/**
	 * @brief default destructor.
	 */
	virtual ~MatchView() = default;

	virtual std::vector<cv::DMatch> getMatchSelection()
	{
		return std::vector<cv::DMatch>{};
	}

	virtual std::vector<cv::KeyPoint> getKeyPointSelection()
	{
		return std::vector<cv::KeyPoint>{};
	}

      public
slots:

	virtual void setMatchSelection(std::vector<cv::DMatch>)
	{
	}

	virtual void setKeyPointSelection(std::vector<cv::KeyPoint>)
	{
	}

      protected:
	/**
	 * @brief constructor of QWidget(parent).
	 * @param parent the parent of this view.
	 **/
	MatchView(QWidget *parent) : QWidget{ parent }
	{
	}
};
}
} // namespaces

#endif
