/***************************************************************************
                          otrplugin.h  -  description
                             -------------------
    begin                : 11 03 2007
    copyright            : (C) 2007-2007 by Michael Zanetti
    email                : michael_zanetti@gmx.net
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef OTRPLUGIN_H
#define OTRPLUGIN_H


#include <kdebug.h>

#include <kopeteplugin.h>
#include <kopetemessagehandler.h>

#include "otrlchatinterface.h"


/**
  * @author Michael Zanetti
  */

class OTRPlugin;
class TDESelectAction;

class OtrMessageHandler : public Kopete::MessageHandler
{
private:
	OTRPlugin *plugin;
public:
	OtrMessageHandler( OTRPlugin *plugin ) : plugin(plugin) {
		kdDebug() << "MessageHandler created" << endl;
	}
	~OtrMessageHandler(){
		kdDebug() << "MessageHandler destroyed" << endl;
	}
	void handleMessage( Kopete::MessageEvent *event );
};

class OtrMessageHandlerFactory : public Kopete::MessageHandlerFactory
{
private:
	OTRPlugin *plugin;
	OtrMessageHandler *messageHandler;
public:
	OtrMessageHandlerFactory( OTRPlugin *plugin ) : plugin(plugin) {}
	Kopete::MessageHandler *create( Kopete::ChatSession *, Kopete::Message::MessageDirection direction )
	{
		return new OtrMessageHandler(plugin);
	}
	int filterPosition( Kopete::ChatSession *, Kopete::Message::MessageDirection )
	{
		return Kopete::MessageHandlerFactory::InStageToSent+1;
	}
};

class TDE_EXPORT OTRPlugin : public Kopete::Plugin
{
	TQ_OBJECT

public:

	static OTRPlugin  *plugin();

	OTRPlugin( TDEInstance *instance, TQObject *parent, const char *name, const TQStringList &args );
	~OTRPlugin();

	void emitGoneSecure( Kopete::ChatSession *session, int status );
	TQMap<TQString, TQString> getMessageCache();

public slots:

	void slotOutgoingMessage( Kopete::Message& msg );
	void slotEnableOtr( Kopete::ChatSession *session, bool enable );
	void slotSettingsChanged();
	void slotVerifyFingerprint( Kopete::ChatSession *session );

private slots:
	void slotNewChatSessionWindow(Kopete::ChatSession * );
	void slotSelectionChanged( bool single );
	void slotSetPolicy();
	void accountReady( Kopete::Account *account );

private:
	static OTRPlugin* pluginStatic_;
	OtrMessageHandlerFactory *m_inboundHandler;
	OtrlChatInterface *otrlChatInterface;
	TQMap<TQString, TQString> messageCache;
	TDESelectAction* otrPolicyMenu;

/*	TDEActionMenu *otrPolicyMenuBar;
	TDEActionMenu *otrPolicyPopup;
	TDEAction *otrPolicyDefault;
	TDEAction *otrPolicyAlways;
	TDEAction *otrPolicyOpportunistic;
	TDEAction *otrPolicyManual;
	TDEAction *otrPolicyNever;
//	SessionManager manager
*/

signals:
	void goneSecure( Kopete::ChatSession *session, int state );

};

#endif
