/*
    translatorguiclient.cpp

    Kopete Translator plugin

    Copyright (c) 2003-2004 by Olivier Goffart <ogoffart @ kde.org>

    Kopete    (c) 2003-2004 by the Kopete developers  <kopete-devel@kde.org>

    *************************************************************************
    *                                                                       *
    * 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.                                   *
    *                                                                       *
    *************************************************************************
*/

#include <tqvariant.h>

#include <kdebug.h>
#include <tdeaction.h>
#include <tdelocale.h>

#include "kopetechatsession.h"
#include "kopeteview.h"
#include "kopetecontact.h"
#include "kopetemetacontact.h"
#include "kopetemessage.h"

#include "translatorplugin.h"
#include "translatorguiclient.h"
#include "translatorlanguages.h"

TranslatorGUIClient::TranslatorGUIClient( Kopete::ChatSession *parent, const char *name )
: TQObject( parent, name ), KXMLGUIClient( parent )
{
	setInstance( TranslatorPlugin::plugin()->instance() );
	connect( TranslatorPlugin::plugin(), TQ_SIGNAL( destroyed( TQObject * ) ), this, TQ_SLOT( deleteLater() ) );

	m_manager = parent;

	new TDEAction( i18n( "Translate" ), "locale", CTRL + Key_T, this, TQ_SLOT( slotTranslateChat() ), actionCollection(), "translateCurrentMessage" );
	
	setXMLFile( "translatorchatui.rc" );
}

TranslatorGUIClient::~TranslatorGUIClient()
{
}

void TranslatorGUIClient::slotTranslateChat()
{
	if ( !m_manager->view() )
		return;

	Kopete::Message msg = m_manager->view()->currentMessage();
	TQString body = msg.plainBody();
	if ( body.isEmpty() )
		return;

	TQString src_lang = TranslatorPlugin::plugin()->m_myLang;
	TQString dst_lang;

	TQPtrList<Kopete::Contact> list = m_manager->members();
	Kopete::MetaContact *to = list.first()->metaContact();
	dst_lang = to->pluginData( TranslatorPlugin::plugin(), "languageKey" );
	if ( dst_lang.isEmpty() || dst_lang == "null" )
	{
		kdDebug( 14308 ) << k_funcinfo << "Cannot determine dst Metacontact language (" << to->displayName() << ")" << endl;
		return;
	}

	// We search for src_dst
	TranslatorPlugin::plugin()->translateMessage( body, src_lang, dst_lang, this, TQ_SLOT( messageTranslated( const TQVariant & ) ) );
}

void TranslatorGUIClient::messageTranslated( const TQVariant &result )
{
	TQString translated = result.toString();
	if ( translated.isEmpty() )
	{
		kdDebug( 14308 ) << k_funcinfo << "Empty string returned"  << endl;
		return;
	}

	//if the user close the window before the translation arrive, return
	if ( !m_manager->view() )
		return;

	Kopete::Message msg = m_manager->view()->currentMessage();
	msg.setBody( translated );
	m_manager->view()->setCurrentMessage( msg );
}

#include "translatorguiclient.moc"
