#ifndef WUI_TABLE_VIEW_H
#define WUI_TABLE_VIEW_H

#include "WUI_TableView.h"
#include "WUI_Form_Dialog.h"

#include <Wt/WDialog>
#include <Wt/WPushButton>
#include <Wt/WVBoxLayout>
#include <Wt/WHBoxLayout>
#include <Wt/WGridLayout>
#include <Wt/WLabel>
#include <Wt/WLabel>
#include <Wt/WBreak>
#include <Wt/WBorder>
#include <Wt/WText>
#include <Wt/Dbo/Dbo>
using namespace Wt;
using namespace Wt::Dbo;


#include <string>
using namespace std;


template <class Result>
class WUI_Table_View_Form : public WContainerWidget
{
	/**
	 * @class DBInterfaceView
	 * @brief Template class for showing all tables and settings
	 */
private:
	Wt::WGridLayout * layout_grid_main;
    Wt::WContainerWidget * header;
	Wt::WHBoxLayout * layout_H_head;
	Wt::WContainerWidget * footer;
	Wt::WHBoxLayout * layout_h_foot;
	Wt::WText * label_dialog_name;
public:
	Wt::WPushButton *add;
	Wt::WPushButton *remove;
	Wt::WPushButton *edit;
	WUI_TableView <Result> * contents;
	Wt::WPushButton *ok;
	Wt::WPushButton *cancel;

	/**
	 * @class WUI_Table_View();
	 * @brief Default constructor(Does nothing)
	 */
	WUI_Table_View_Form(){;}
	/**
	 * @fn WUI_Table_View_Form(string dialog_label,Query <Result> * query,bool ok = true ,bool cancel=false)
	 * @brief Specialized constructor
	 * It creates the whole form
	 */
	WUI_Table_View_Form(string dialog_label,Query <Result> * query,bool ok = true ,bool cancel=false)
	{
        layout_grid_main = new Wt::WGridLayout();
        header = new Wt::WContainerWidget();
        layout_H_head = new WHBoxLayout();
        footer = new Wt::WContainerWidget();
        layout_h_foot = new Wt::WHBoxLayout();
        label_dialog_name = new Wt::WText();
        contents = new WUI_TableView<Result>(query);

		this->setOverflow(OverflowHidden);
        header->setStyleClass("dialog-head");

		this->add = new WPushButton();
		add->setIcon("resource/add.png");
		this->remove = new WPushButton();
		remove->setIcon("resource/remove.png");
		this->edit = new WPushButton();
		edit->setIcon("resource/edit.png");
		this->add->setMaximumSize(48,48);
		this->remove->setMaximumSize(48,48);
		this->edit->setMaximumSize(48,48);

		contents->view->resize(875,300);
		contents->resize(875,300);
		contents->setMaximumSize(875,300);

		layout_H_head->addWidget(add,0);
		layout_H_head->addWidget(remove,0);
		layout_H_head->addWidget(edit,0);
		layout_H_head->addStretch(10);


		label_dialog_name->setText(dialog_label);
        header->addWidget(label_dialog_name);

        layout_grid_main->addWidget(header,1,1);
		layout_grid_main->addLayout(layout_H_head,2,1);
		layout_grid_main->addWidget(contents,3,1);

		setFooter(ok,cancel);

		layout_grid_main->setRowStretch(1,0);
		layout_grid_main->setRowStretch(2,10);
		layout_grid_main->setRowStretch(3,0);
		layout_grid_main->setVerticalSpacing(2);

		this->setLayout(layout_grid_main);
		setMinimumSize(150,400);

		return;
	}

	/**
	 * @fn Wt::WContainerWidget * getContentsWid(){return this->contents;}
	 * @brief Makes access to the diaolg contents
	 */
	Wt::WContainerWidget * getContentsWid(){return this->contents;}

	/**
	 * @fn void setFooter(bool ok, bool cancel)
	 * @brief Creates the buttom buttons
	 *
	 */
	void setFooter(bool ok, bool cancel)
	{
		this->ok = new Wt::WPushButton("Apply");
		this->ok->setDefault(true);
		this->ok->setMinimumSize(60,10);
		this->cancel = new Wt::WPushButton("Cancel");
		this->cancel->setDefault(false);
		layout_h_foot->addStretch(10);
		if (ok)
		{
			layout_h_foot->addWidget(this->ok);
		}
		if(cancel)
		{
			layout_h_foot->addWidget(this->cancel);
		}
		footer->setLayout(layout_h_foot);
		//footer->setStyleClass("bordered-content");
		if(ok||cancel)
		{
			layout_grid_main->addWidget(footer,4,1);
		}
		return;
	}

	/**
	 * @fn ~WUI_Table_View_Form()
	 * @brief Default Destructor
	 *
	 */
	~WUI_Table_View_Form()
	{
//        delete this->contents;
//        delete this->label_dialog_name;
//        delete this->header;
//        delete this->add;
//        delete this->remove;
//        delete this->edit;
//        delete this->ok;
//        delete this->cancel;
//        delete this->layout_H_head;
//        delete this->layout_h_foot;
        delete this->layout_grid_main;
    }
};



#endif // WUI_TABLE_VIEW_H
