/**********************************************************************
 * LeechCraft - modular cross-platform feature rich internet client.
 * Copyright (C) 2006-2014  Georg Rudoy
 *
 * Boost Software License - Version 1.0 - August 17th, 2003
 *
 * Permission is hereby granted, free of charge, to any person or organization
 * obtaining a copy of the software and accompanying documentation covered by
 * this license (the "Software") to use, reproduce, display, distribute,
 * execute, and transmit the Software, and to prepare derivative works of the
 * Software, and to permit third-parties to whom the Software is furnished to
 * do so, all subject to the following:
 *
 * The copyright notices in the Software and this entire statement, including
 * the above license grant, this restriction and the following disclaimer,
 * must be included in all copies of the Software, in whole or in part, and
 * all derivative works of the Software, unless such copies or derivative
 * works are solely in the form of machine-executable object code generated by
 * a source language processor.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 **********************************************************************/

#ifndef PLUGINS_AZOTH_INTERFACES_IHAVEDIRECTEDSTATUS_H
#define PLUGINS_AZOTH_INTERFACES_IHAVEDIRECTEDSTATUS_H
#include <QtPlugin>
#include "iclentry.h"

namespace LeechCraft
{
namespace Azoth
{
	/** @brief Interface for entries for sending directed statuses.
	 *
	 * This interface should be implemented by CL entries that support
	 * directed statuses — that is, statuses sent only to a given entry.
	 *
	 * @sa ICLEntry
	 */
	class IHaveDirectedStatus
	{
	public:
		virtual ~IHaveDirectedStatus () {}

		/** @brief Checks if status can be sent to the given variant.
		 *
		 * This function should return false if directed status cannot
		 * be  sent to variant right now, otherwise it should return
		 * true (even in doubt). A naive implementation may choose to
		 * always return true here.
		 *
		 * @param[in] variant The variant of the entry to check.
		 * @return Whether directed status can be sent to the given
		 * variant.
		 */
		virtual bool CanSendDirectedStatusNow (const QString& variant) = 0;

		/** @brief Sends directed status to the given variant.
		 *
		 * This function should (try to) send the given status to the
		 * given variant of the entry.
		 *
		 * @param[in] status The status to send.
		 * @param[in] variant The variant of the entry where to send the
		 * status.
		 */
		virtual void SendDirectedStatus (const EntryStatus& status, const QString& variant) = 0;
	};
}
}

Q_DECLARE_INTERFACE (LeechCraft::Azoth::IHaveDirectedStatus,
		"org.Deviant.LeechCraft.Azoth.IHaveDirectedStatus/1.0");

#endif
