#pragma once
#include <cstdio>
#include <iostream>
#include <vector>
#include "dXgtcFrame.h"

class Xgem;

class DbrU {
	
public:
	
	DbrU::DbrU(uint32_t _buffOcc);
	DbrU::DbrU();

	uint32_t getBuffOcc() { return buffOcc; }
	void setBuffOcc(int32_t _buffOcc) { buffOcc = _buffOcc; }

private:
	uint32_t buffOcc;	
};

class AlokacniInterval {
	
public:
	
	AlokacniInterval(DbrU _dbrU, Xgem _xgem);
	AlokacniInterval();

	DbrU getDbrU() { return dbrU; }
	void setDbrU(DbrU _dbrU) { dbrU = _dbrU; }

	Xgem getXgtcNaklad() { return xgtcNaklad; }
	void setDbrU(Xgem _xgtcNaklad) { xgtcNaklad = _xgtcNaklad; }

private:
	DbrU dbrU;
	Xgem xgtcNaklad;
};

class uXgtcHeader {
	
public:
	
	uXgtcHeader(int16_t _onuId);
	uXgtcHeader() ;

	int16_t getOnuId() { return onuId; }
	void setonuId(int16_t _onuId) { onuId = _onuId; }

private:
	int16_t onuId;	
	//int16_t ind;
	//int16_t hec;
	//uint64_t ploamU;
};

class uXgtcBurst {
	//fixní delka 135 432 bytů
public:
	
	uXgtcBurst(int16_t _onuId, std::vector<AlokacniInterval> _alokacniInterval);
	uXgtcBurst();

	uXgtcHeader getHeader() { return Header; }
	void setHeader(uXgtcHeader _header) { Header = _header; }

	std::vector<AlokacniInterval> getAlokacniInterval() { return alokacniInterval; }
	void setAlokacniInterval(std::vector<AlokacniInterval> _alokacniInterval) { alokacniInterval = _alokacniInterval; }

private:
	uXgtcHeader Header;
	std::vector<AlokacniInterval> alokacniInterval;
	//uint8_t Bip;	//reálně 4 bitový záhlavi
};