/*
 Eteria IRC Client, an RFC 1459 compliant client program written in Java.
 Copyright (C) 2000  Javier Kohen <jkohen at tough.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 import java.text.MessageFormat;
 import java.util.*;
 
 import ar.com.jkohen.util.Resources;
 import ar.com.jkohen.util.ConfigurationProperties;
 
 public class IRCServices implements Observer
 {
 	private static EIRC eirc;
 	private Resources res;
 	
 	private static int NICKS = 0;
 	private static int CHANS = 1;
 	private static int MEMOS = 2;
 	private static int BOTS = 3;
 	private static int HELP = 4;
 	private static int OPER = 5;
 	private static int HOSTS = 6;
 	
 	private static int SERV_NUM = 7;
 	private static String serv[];
 	
 	private static String eggs;
 
 	private static final MessageFormat reg_str = new MessageFormat(Resources.getString("services.ns.reg"));
 	private static final MessageFormat ident_str = new MessageFormat(Resources.getString("services.ns.ident"));
 	private static final MessageFormat ghost_str = new MessageFormat(Resources.getString("services.ns.ghost"));
 	
 	public IRCServices(EIRC eirc)
 	{
 		this.eirc = eirc;
 		this.serv = new String[SERV_NUM];
 		this.eggs = "";
 	}
 
 	public boolean isService(String name)
 	{
 		for (int i = 0; i < SERV_NUM; i++)
 			if (name.equalsIgnoreCase(serv[i]))
 				return(true);
 				
 		if (eggs != null && !eggs.equals(""))
 		{
 			StringTokenizer st = new StringTokenizer(eggs, ",");
 			while (st.hasMoreTokens())
 			{
 				if (name.equalsIgnoreCase(st.nextToken()))
 					return(true);
 			}
 		}
 				
 		return(false);
 	}
 
 	public void identifyNick(String nick, String user, String pwd)
 	{
 		if (pwd == null || pwd.equals("") || serv[NICKS] == null || serv[NICKS].equals(""))
 			return;
 
 		Object [] o = { pwd, user, nick };
 		String p[] = { serv[NICKS], ident_str.format(o) };
 		eirc.sendMessage("PRIVMSG", p);
 	}
 	
 	public void op()
 	{
 		if (serv[CHANS] == null || serv[CHANS].equals(""))
 			return;
 			
 		String p[] = { serv[CHANS], res.getString("services.cs.op") };
 		eirc.sendMessage("PRIVMSG", p);
 	}
 	
 	public void killGhost(String nick, String passwd)
 	{
 		if (passwd == null || passwd.equals("") || serv[NICKS] == null || serv[NICKS].equals(""))
 			return;
 			
 		Object [] o = { nick, passwd };
 		String p[] = { serv[NICKS], ghost_str.format(o) };
 		eirc.sendMessage("PRIVMSG", p);
 	}
 	
 	public void registerNick(String passwd, String email)
 	{
 		if (passwd == null || passwd.equals("") || serv[NICKS] == null || serv[NICKS].equals(""))
 			return;
 			
 		Object [] o = { passwd, email };
 		String p[] = { serv[NICKS], reg_str.format(o) };
 		eirc.sendMessage("PRIVMSG", p);
 	}
 	
 	public boolean isIdPrompt(String service, String message)
 	{
 		return(message.indexOf(res.getString("services.ns.prompt")) >= 0 && service.equals(serv[NICKS]));
 	}
 	
 	public boolean isPassBad(String service, String message)
 	{
 		return(message.indexOf(res.getString("services.ns.loginbad")) >= 0 && service.equals(serv[NICKS]));
 	}
 	
 	public boolean isPassOk(String service, String message)
 	{
 		return(message.indexOf(res.getString("services.ns.loginok")) >= 0 && service.equals(serv[NICKS]));
 	}
 	
 	public void update(Observable o, Object arg)
 	{
 		ConfigurationProperties props = (ConfigurationProperties) o;
 
  		if (arg == null || arg.equals("service_bots.nicks"))
 			this.serv[NICKS] = props.getString("service_bots.nicks");
 			
 		if (arg == null || arg.equals("service_bots.chans"))
 			this.serv[CHANS] = props.getString("service_bots.chans");
 			
 		if (arg == null || arg.equals("service_bots.memos"))
 			this.serv[MEMOS] = props.getString("service_bots.memos");
 			
 		if (arg == null || arg.equals("service_bots.bots"))
 			this.serv[BOTS] = props.getString("service_bots.bots");
 			
 		if (arg == null || arg.equals("service_bots.help"))
 			this.serv[HELP] = props.getString("service_bots.help");
 			
 		if (arg == null || arg.equals("service_bots.oper"))
 			this.serv[OPER] = props.getString("service_bots.oper");
 
 		if (arg == null || arg.equals("service_bots.hosts"))
 			this.serv[HOSTS] = props.getString("service_bots.hosts");
 			
 		if (arg == null || arg.equals("others_bots"));
 			this.eggs = props.getString("others_bots");
 	}
 }