#ifndef FRAMEWORK_EVENTS_EVENT_H_
#define FRAMEWORK_EVENTS_EVENT_H_

#include <cstdint>
#include "../events/fwSubsystemIdRanges.h"
//could be move to more suitable location
#include <subsystemIdRanges.h>

typedef uint16_t EventId_t;
typedef uint8_t EventSeverity_t;

#define MAKE_EVENT(id, severity) (((severity)<<16)+(SUBSYSTEM_ID*100)+(id))

typedef uint32_t Event;

namespace EVENT {
EventId_t getEventId(Event event);

EventSeverity_t getSeverity(Event event);

Event makeEvent(EventId_t eventId, EventSeverity_t eventSeverity);

}

namespace SEVERITY {
	static const EventSeverity_t INFO = 1;
	static const EventSeverity_t LOW = 2;
	static const EventSeverity_t MEDIUM = 3;
	static const EventSeverity_t HIGH = 4;
}

//Unfortunately, this does not work nicely because of the inability to define static classes in headers.
//struct Event {
//	Event(uint8_t domain, uint8_t counter, EventSeverity_t severity) :
//			id(domain*100+counter), severity(severity) {
//	}
//	EventId_t id;
//	EventSeverity_t severity;
//	static const EventSeverity_t INFO = 1;
//	static const EventSeverity_t LOW = 2;
//	static const EventSeverity_t MEDIUM = 3;
//	static const EventSeverity_t HIGH = 4;
//};

#endif /* FRAMEWORK_EVENTS_EVENT_H_ */