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

#include "repoinfo.h"
#include <QtDebug>

namespace LeechCraft
{
namespace LackMan
{
	RepoInfo::RepoInfo ()
	{
	}

	RepoInfo::RepoInfo (const QUrl& url)
	: URL_ (url)
	{
	}

	RepoInfo::RepoInfo (const QUrl& url, const QString& name,
			const QString& shortDescr, const QStringList& components)
	: URL_ (url)
	, Name_ (name)
	, ShortDescr_ (shortDescr)
	, Components_ (components)
	{
	}

	const QUrl& RepoInfo::GetUrl () const
	{
		return URL_;
	}

	void RepoInfo::SetUrl (const QUrl& url)
	{
		URL_ = url;
	}

	const QString& RepoInfo::GetName () const
	{
		return Name_;
	}

	void RepoInfo::SetName (const QString& name)
	{
		Name_ = name;
	}

	const QString& RepoInfo::GetShortDescr () const
	{
		return ShortDescr_;
	}

	void RepoInfo::SetShortDescr (const QString& descr)
	{
		ShortDescr_ = descr;
	}

	const QString& RepoInfo::GetLongDescr () const
	{
		return LongDescr_;
	}

	void RepoInfo::SetLongDescr (const QString& descr)
	{
		LongDescr_ = descr;
	}

	const MaintainerInfo& RepoInfo::GetMaintainer () const
	{
		return Maintainer_;
	}

	void RepoInfo::SetMaintainer (const MaintainerInfo& maint)
	{
		Maintainer_ = maint;
	}

	const QStringList& RepoInfo::GetComponents () const
	{
		return Components_;
	}

	void RepoInfo::SetComponents (const QStringList& components)
	{
		Components_.clear ();
		Q_FOREACH (const QString& c, components)
			Components_ << c.simplified ();
	}

	bool operator== (const Dependency& dep1, const Dependency& dep2)
	{
		return dep1.Type_ == dep2.Type_ &&
				dep1.Name_ == dep2.Name_ &&
				dep1.Version_ == dep2.Version_;
	}

	void PackageInfo::Dump () const
	{
		qDebug () << "Package name: " << Name_
				<< "; versions:" << Versions_
				<< "; type:" << Type_
				<< "; language:" << Language_
				<< "; description:" << Description_
				<< "; long descr:" << LongDescription_
				<< "; tags:" << Tags_
				<< "; maintainer:" << MaintName_ << MaintEmail_
				<< "; icon:" << IconURL_
				<< "; package sizes:" << PackageSizes_
				<< "; dependencies:";
		Q_FOREACH (QString version, Deps_.keys ())
			Q_FOREACH (const Dependency& d, Deps_ [version])
				qDebug () << "\t" << version << d.Type_ << d.Name_ << d.Version_;
		if (Images_.size ())
		{
			qDebug () << "; images:";
			Q_FOREACH (const Image& img, Images_)
				qDebug () << "\t" << img.Type_ << img.URL_;
		}
	}

	bool operator== (const ListPackageInfo& lpi1, const ListPackageInfo& lpi2)
	{
		return lpi1.PackageID_ == lpi2.PackageID_;
	}

	uint qHash (const Dependency& dep)
	{
		return qHash (QString::number (dep.Type_) + dep.Name_ + dep.Version_);
	}
}
}
