#ifndef AUTORESPONDER_H
#define AUTORESPONDER_H

#include <QtCore/QObject>
#include <QtCore/QList>

#include "config_file.h"
#include "configuration_aware_object.h"
#include "main_configuration_window.h"
#include "misc.h"
#include "protocol.h"
#include "usergroup.h"
/**
 * @defgroup autoresponder Autoresponder
 * @{
 */

class ChatWidget;

class AutoResponder : public ConfigurationUiHandler, ConfigurationAwareObject
{
	Q_OBJECT

	private:
		QList<UserListElements> repliedUsers; /*!< uiny osób, którym już odpowiedziano */

		QString autotext; /*!< treść automatycznej odpowiedzi */

		bool respondConferences; /*!< czy odpowiadać na konkerencje */
		bool respondOnlyFirst; /*!< czy odpowiadać tylko na pierwszą wiadomość */

		bool statusAvailable; /*!< czy odpowiadamy, gdy jesteśmy dostępni */
		bool statusBusy; /*!< czy odpowiadamy, gdy jesteśmy zajęci */
		bool statusInvisible; /*!< czy odpowiadamy, gdy jesteśmy niewidoczni */

		/**
			\fn void import_0_5_0_Configuration()
			Import danych konfiguracyjnych ze starszej wersji Kadu.
		**/
		void import_0_5_0_Configuration();
		void createDefaultConfiguration();

	protected:
		/**
			\fn void configurationUpdated()
			Metoda jest wywoływana po zmianie w oknie konfiguracyjnym.
		**/
		virtual void configurationUpdated();

	public:
		/**
			\fn AutoResponder(QObject *parent=0, const char *name=0)
			Standardowy konstruktor
			\param parent rodzic - domyślnie 0
			\param name nazwa - domyślnie 0
		**/
		AutoResponder(QObject *parent=0, const char *name=0);
		virtual ~AutoResponder();
		virtual void mainConfigurationWindowCreated(MainConfigurationWindow *mainConfigurationWindow);

	public slots:

		/**
			\fn void messageReceived(Protocol *protocol, UserListElements senders, const QString& msg, time_t time)
			Slot jest wywoływany po odebraniu wiadomości.
			\param protocol protokół po którym nadeszła wiadomość
			\param senders lista nadawców wiadomości
			\param msg treść wiadomości
			\param time czas
		**/
		void messageReceived(Protocol *protocol, UserListElements senders, const QString& msg, time_t time);

		/**
			\fn void chatOpenedClosed(ChatWidget *chat)
			Slot jest wywoływany przy otwieraniu lub po zamknięciu
			okna chat.
			\param chat okno wiadomości
		**/
		void chatOpenedClosed(ChatWidget *chat);
};

extern AutoResponder* autoresponder;

/** @} */

#endif
