#pragma once
#include "Simulator.h"

Simulator::Simulator(Olt _olt, std::vector<Onu> _onus, double _casSimulace) {
	Onus = _onus;
	olt = _olt;
	casSimulace = _casSimulace;
	int casVypisu = 1; //v ms
	zakladniHodnotaVypisu = ((double)casVypisu / (double)1000) / (double)casVypisu / casovaPresnost;	//neboli pocet startimu do vypisu
	simuluj();
}

void Simulator::simuluj(void) {

	for (double static cas = 0; cas <= casSimulace; cas += casovaPresnost)
	{
		if (vypisZa <= 0)
		{
			std::cout << "Simuluji pro cas: " << std::setprecision(3) << cas << std::endl;
			vypisZa = zakladniHodnotaVypisu;
		}
		else
			vypisZa--;

		if (aktualniStartTime > 9719)
			aktualniStartTime = 0;
		
		for (uint16_t i = 0; i < Onus.size(); i++)
		{
			Onus[i].simuluj(cas, (int16_t)round(aktualniStartTime), PonUp, &PonDown);
		}
		
		olt.simuluj(cas, (int16_t)aktualniStartTime, &Onus, PonUp, PonDown);
		if (aktualniStartTime == 1600)
		{
		
		int t = 1;
		}
		aktualniStartTime++;
	}

	
	for (uint16_t i = 0; i < Onus.size(); i++)
	{
		Onus[i].vygenerujStatistiky();
		Onus[i].vygenerujStatistikyIdle();
	}
	olt.vygenerujStatistiky();
}

Simulator::Simulator()
{
	PonDown = DXgtcFrame();
}

Simulator::~Simulator()
{
}
