/*
 * proxy.h
 *	 Header file for proxy access
 *   ____            _
 *  |  _ \ ___  __ _| |_ __ ___  ___
 *  | |_) / _ \/ _` | | '_ ` _ \/ __|
 *  |  _ <  __/ (_| | | | | | | \__ \
 *  |_| \_\___|\__,_|_|_| |_| |_|___/
 *
 * Permission to use, modify and distribute is granted via the
 *  Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License
 *    http://creativecommons.org/licenses/by-nc-sa/3.0/
 *
 * 	Copyright (C) 2007-2012 Jason Mitchell, Randi Mitchell
 * 	   Contributions by Tim Callahan, Jonathan Hseu
 *  Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman
 *
 */
#ifndef PROXY_H_
#define PROXY_H_
class ProxyAccess;
typedef std::multimap<bstring, ProxyAccess> ProxyMultiMap;
typedef std::pair<ProxyMultiMap::iterator, ProxyMultiMap::iterator> ProxyMultiMapRange;
class ProxyManager {
	friend class Config;
public:
	ProxyManager();
	void save();
	void clear();
	bool hasProxyAccess(Player* proxy, Player* proxied);
	void grantProxyAccess(Player* proxy, Player* proxied);
	bool removeProxyAccess(Player* proxy, Player* proxied);
	bool removeProxyAccess(bstring id, Player* proxied);
protected:
	void loadProxies();
	ProxyMultiMap proxies;
};
class ProxyAccess {
public:
	ProxyAccess(xmlNodePtr rootNode);
	ProxyAccess(Player* proxy, Player* proxied);
	bool hasProxyAccess(Player* proxy, Player* proxied);
	void save(xmlNodePtr rootNode);
protected:
	// Character allowing proxy access
	bstring proxiedName;
	bstring proxiedId;
	// Character allowed to proxy
	bstring proxyName;
	bstring proxyId;
public:
	bstring getProxiedId() const;
	bstring getProxiedName() const;
	bstring getProxyId() const;
	bstring getProxyName() const;
};
#endif /* PROXY_H_ */