/**********************************************************************
 *  LeechCraft - modular cross-platform feature rich internet client.
 *  Copyright (C) 2010-2013  Oleg Linkin
 *
 *  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.
 *
 **********************************************************************/

#include "friendsproxymodel.h"

namespace LeechCraft
{
namespace Blogique
{
namespace Metida
{
	FriendsProxyModel::FriendsProxyModel (QObject *parent)
	: QSortFilterProxyModel (parent)
	{
		setFilterCaseSensitivity (Qt::CaseInsensitive);
		setSortCaseSensitivity (Qt::CaseInsensitive);
	}

	bool FriendsProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const
	{
		if (filterRegExp ().isEmpty ())
			return true;
		const auto& nick = sourceModel ()->index (sourceRow, CNickname, sourceParent).data ().toString ();
		const auto& name = sourceModel ()->index (sourceRow, CUsername, sourceParent).data ().toString ();
		const auto& birthday = sourceModel ()->index (sourceRow, CBirthday, sourceParent).data ().toString ();
		return nick.contains (filterRegExp ()) || name.contains (filterRegExp ()) || birthday.contains (filterRegExp ());
	}

	bool FriendsProxyModel::lessThan (const QModelIndex& left, const QModelIndex& right) const
	{
		if (left.column () != CFriendStatus || right.column () != CFriendStatus)
			return QSortFilterProxyModel::lessThan (left, right);
		
		const int leftStatus = sourceModel ()->data (left, FRFriendStatus).toInt ();
		const int rightStatus = sourceModel ()->data (right, FRFriendStatus).toInt ();
		switch (leftStatus)
		{
		case FSFriendOf:
			return true;
		case FSMyFriend:
			switch (rightStatus)
			{
			case FSFriendOf:
				return false;
			case FSMyFriend:
				return true;
			case FSBothFriends:
				return true;
			default:
				return true;
			}
		case FSBothFriends:
			return false;
		default:
			return true;
		}
		return true;
	}

}
}
}
