#ifndef MAINFRAME_WIDGET_H
#define MAINFRAME_WIDGET_H

#include <QtGui>
#include "ui_mainframeWidget.h"
#include "softProj\DetailsWidget\ParamDetailsWidget.h"
#include "softProj\clientServer\structs.h"
#include "softProj\Main\INotifyUpdate.h"

///Manages and displays Mainnframe data.
class MainframeWidget : public NotifyWidget {
	Q_OBJECT

private:
	Ui::MainframeWidget ui_;
	QString consumptionUnit_;
public:
	MainframeWidget(QWidget * parent) : NotifyWidget(parent) {
		ui_.setupUi(this);

		ui_.mainframeSection->setName(L"Hlavní počítač");

		ui_.prediction->setName(L"Predikce");
		ui_.prediction->setDescription(
			L"Predikce ovlivňuje zejména manévrovatelnost lodí a přesnost zbraní, zlepšuje činnost senzorů a zvyšuje navigační a pohybové možnosti.\n\n"
			L"Predikce by se dala přirovnat k výkonnému softwaru či instrukční sadě počítačů dnešní doby.");

		ui_.bionodes->setName(L"Bio-uzly");
		ui_.bionodes->setDescription(
			L"Bio-uzly zlepšují schopnost počítačů kontrolovat více základen a lodí. Tento parametr limituje, kolik základen či lodí může hráč vlastnit.\n\n"
			L"Bio-uzly by se daly přirovnat k operační paměti počítačů dnešní doby");

		ui_.timeReusability->setName(L"Znovupoužitelnost\nčasu");
		ui_.timeReusability->setDescription(
			L"Znovupoužitelnost času zlepšuje především fungování energetických systémů (zbraní, štítů, a dalších) a vědeckých laboratoří.\n\n"
			L"Znovupoužitelnost času lze přirovnat k taktovací frekvenci procesorů dnešní doby.");

		ui_.descriptionText->setText(QString::fromUtf16(L"Funkcí generátoru štítů je zajištění deflektorových energetických štítů kolem lodi. \n\nŠtíty výrazně chrání tak loď před útoky nepřátel"));

		ui_.consumptionButton->setText(QString::fromUtf16(L"Spotřeba energie"));
		ui_.damageStatusLabel->setText(QString::fromUtf16(L"Stav zařízení"));
		ui_.damageStatusSlider->setUnit(L"%");
		ui_.damageStatusSlider->setLimits(0, 100);
		ui_.damageStatusSlider->setEnabled(false);

		consumptionUnit_ = " GW";
	}

	void setState(mainframe_status & state) {
		this->rememberUpdateTime();

		ui_.prediction->setCount(state.actualPrediction);	
		ui_.bionodes->setCount(state.actualBioNodes);			
		ui_.timeReusability->setCount(state.actualTimeReusability);		

		ui_.consumptionValue->setText(Settings::instance().formatNumber((unsigned long long) (state.actualConsumption * 100)) + consumptionUnit_);	
		ui_.damageStatusSlider->setValue(state.status * 100);
	} /**< Sets and displayes mainframe params. */

	void notifyUpdate() {}
};

#endif