#ifndef EVENTPARSER_H
#define EVENTPARSER_H

#include <QXmlStreamReader>
#include "../event/event.h"
#include <QDateTime>
#include <QVariantList>
#include <QVariantMap>
#include "../datafilter.h"

/**
  * Bazowa klasa dla wszystkich klas analizujących zdarzenia.
  * 4688 Został stworzony proces.
  * 4689 Proces się zakończył.
  * 4624 Użytkownik się zalogował.
  * 4625 Użytkownikowi nie udało się zalogować.
  * 4634 Użytkownik się wylogował.
  * Aby napisać klasę konkretnego parsera wystarczy skopiować kontruktor, metodę parsującą i metodę 'toString'
  * z istniejącego parsera i dostosować je do zdarzenia innego typu. Trzeba również pamiętać
  * o stworzeniu odpowiednich właściwości w nowo tworzonej klasie.
  */
class EventParser
{
public:

    inline int eventId() const { return _eventId; }

	/**
	  * Ta metoda jest w każdej klasie bardzo podobna.
	  * Dla lokalnej czytelności nie została sparametryzowana.
	  * Żeby zaimplementować nowego parsera wystarczy ją skopiować
	  * i podmienić nazwy szukanych atrybutów oraz tworzone i zwracane zdarzenia.
	  */
    virtual Event* parseEvent(QXmlStreamReader& xml) = 0;

protected:

    EventParser(int eventId);

	DataFilter * _filter;

private:
    EventParser();
//    EventParser(const EventParser& another);
//    EventParser& operator = (const EventParser& another);

    const int _eventId;
};

#endif // EVENTPARSER_H
