#ifndef KADU_CHAT_MESSAGE_H
#define KADU_CHAT_MESSAGE_H

#include <qcolor.h>
#include <qdatetime.h>
#include <qmap.h>
#include <qstring.h>

#include "chat_colors.h"
#include "emoticons.h"

class ChatStyle;

/**

	Klasa przechowująca informacje o wiadomości, która ma się pojawić
	w oknie Chat.
	\class ChatMessage
	\brief Klasa przechowująca informacje o wiadomości.
**/
class ChatMessage
{
	private:
		/**
			\fn QString convertCharacters(QString text, const QColor &bgcolor, EmoticonsStyle style)
			Funkcja zamienia specjalne tagi na emotikonki,
			html na czysty tekst itp.
			\param text tekst do konwersji
			\param bgcolor kolor tła
			\param style styl emotikonek
		**/
		QString convertCharacters(QString text, const QColor &bgcolor, EmoticonsStyle style);


	public:
	QString nick; /*!< nazwa użytkownika */
	QDateTime date; /*!< data otrzymania wiadomości */
	QDateTime sdate; /*!< data wysłania wiadomości */
	QString unformattedMessage; /*!< niesformatowana wiadomość */
	bool isMyMessage; /*!< zmienna mowiąca czy wiadomośc została
				napisana przez nas */
	ChatColors Colors; /*!< przechowuje kolory używane w wiadomości
				(tła, czcionki i nicku) */

	QMap<QString, bool> attributes; /*!<
		Może służyć do przechowywania informacji o tym
		czy wiadomość była potwierdzona, szyfrowana, ...
		W zamyśle ma służyć do określania czy jakiś obrazek
		ma być dodawany do wiadomości czy nie - jaki obrazek -
		ta informacja będzie gdzie indziej
		*/

	//inne atrybuty?
	//QMap<QString, QString> stringAttributes;

	bool needsToBeFormatted; /*!< zmienna mowiąca czy wiadomośc powinna
				  być sformatowana */

	QString message; /*!< Sformatowana wiadomość (razem z \<p\> lub \<table\>) **/

	/**
		\fn ChatMessage(const QString &nick, const QString &unformattedMessage, bool myMessage, QDateTime date, QDateTime sdate=QDateTime())
		Konstruktor ustawiający nick, niesformatowaną wiadomość,
		czy wiadomość pochodzi od nas, datę wiadomości,
		datę nadania wiadomości przez serwer
		\param nick nazwa użytkownika
		\param unformattedMessage niesformatowana wiadomość
		\param myMessage zmienna mowiąca czy wiadomość pochodzi od nas
		\param date data otrzymania wiadomości
		\param sdate data wysłania wiadomości
	**/
	ChatMessage(const QString &nick, const QString &unformattedMessage, bool myMessage, QDateTime date, QDateTime sdate=QDateTime());

	/**
		\fn ChatMessage(const QString &formattedMessage, const ChatColors& colors = ChatColors(Qt::white, Qt::black, Qt::black))
		Konstruktor ustawiający sformatowaną wiadomość,
		kolor tła i liter wiadomości
		\param nick nazwa użytkownika
		\param unformattedMessage niesformatowana wiadomość
		\param myMessage zmienna mowiąca czy wiadomość pochodzi od nas
		\param date data otrzymania wiadomości
		\param sdate data wysłania wiadomości
	**/
	ChatMessage(const QString &formattedMessage,
		const ChatColors& colors = ChatColors(Qt::white, Qt::black, Qt::black));

	/**
		\fn void formatMessage(const ChatStyle* chat_style, const EmoticonsStyle emoticons_style,
			bool include_header, int separator_size);
		Funkcja formatująca niesformatowaną wiadomość
		zgodnie z zadanymi parametrami
		\param chat_style styl dla okna, który powinien zostać użyty
		\param emoticons_style używany styl emotikon
		\param include_header czy powinien być dołączony nagłówek
		\param separator_size wysokość separatora
	**/
	void formatMessage(const ChatStyle* chat_style, const EmoticonsStyle emoticons_style,
		bool include_header, int separator_size);
};

#endif
