package net.trolans.IRC;

public class IRCUser
{
	public String nick;
	public String ident;
	public String host;
	public String realName;
	public String server;
	public boolean isIRCOp;

	static final int IS_IRCOP  = 8;
	static final int IS_CHANOP = 4;
	static final int IS_HALFOP = 2;
	static final int IS_VOICED = 1;
	
	int flag;
	
	public IRCUser(String nickUserHost)
	{
		int bangPos = nickUserHost.indexOf("!");
		if(bangPos > -1)
		{
			int atPos   = nickUserHost.indexOf("@");
			nick  = nickUserHost.substring(0, bangPos);
			ident = nickUserHost.substring(bangPos + 1, atPos);
			host  = nickUserHost.substring(atPos + 1);
		}
		else
		{
			nick = nickUserHost;
		}
		char f = nick.charAt(0);
		if(f == '@' || f == '%' || f == '+')
		{
			nick = nick.substring(1);
			setFlag(f, true);
		}
	}

	public String toString()
	{
		return (getNick());
	}
	public String toFlaggedString()
	{
		return (getPrefix() + getNick());
	}
	public String toFull()
	{
		return (getNick() + "!" + getUserHost());
	}
	public String getUserHost()
	{
		return (getIdent() + "@" + getHost());
	}
	public boolean equals(String nick)
	{
		return (this.nick.equalsIgnoreCase(nick) == true);
	}
	public boolean equals(IRCUser user)
	{
		return (this.nick.equalsIgnoreCase(user.getNick()) == true);
	}

	public String getNick()		{ return nick; }
	public String getHost()		{ return host; }
	public String getRealName()	{ return realName; }
	public String getIdent()	{ return ident;	}
	public String getServer()	{ return server; }

	public String getPrefix()
	{
		String prefix = "";
		if((flag & IS_VOICED) > 0) prefix = "+";
		if((flag & IS_HALFOP) > 0) prefix = "%";
		if((flag & IS_CHANOP) > 0) prefix = "@";
		return prefix;
	}

	public void setFlag(char mode, boolean enable)
	{
		if(enable == true)
		{
			if(mode == '+') flag |= IS_VOICED;
			else if(mode == '%') flag |= IS_HALFOP;
			else if(mode == '@') flag |= IS_CHANOP;
		}
		else
		{
			if(mode == '+') flag &= ~IS_VOICED;
			else if(mode == '%') flag &= ~IS_HALFOP;
			else if(mode == '@') flag &= ~IS_CHANOP;
		}
	}

	public void setRealName(String realName)
	{
		this.realName = realName;
	}
	public void setNick(String nick)
	{
		this.nick = nick;
	}
	public void setServer(String server)
	{
		this.server = server;
	}
	public void setVoiced(boolean voice)
	{
		this.flag |= IS_VOICED;
	}
	public void setIRCOp(boolean ircop)
	{
		this.flag |= IS_IRCOP;
	}
	public void setChanOp(boolean chanop)
	{
		this.flag |= IS_CHANOP;
	}
}

