/** (C) 1999 World Xiangqi League, Confidential, All Rights Reserved */

import java.awt.*;
import java.applet.*;
/* ram added serverPort to output of connect() failure message. July 2, 2000
 */


/** Login to the server and boot the Club GUI.
 * Called from BootApplet.
 */
public class Login {
  public static String serverWeb   = null; // http://xiangqi.com - html stuff
  public static String serverLocal = null; // http://us.xiangqi.com/~xiangqi
  public static String serverHost  = null; // us.xiangqi.com - Java server
  public static boolean hasClient = false;
  public static AppletContext appletContext = null;

  public static String language = "english";

  private BootApplet boot;
  private Applet applet;
  private ProgressBar bar;
  private int serverPort;
  private boolean debug           = false;
  private boolean verbose         = false;
  private Club club;
  public ThreadGroup threadGroup;

  // Created by BootApplet.
  public Login(BootApplet boot, ProgressBar bar) {
    super();
    this.boot = boot;
    this.applet = (Applet)boot;
    this.bar = bar;
    bar.tick("Login start");
  }

  // Invoked by BootApplet.
  public void startup() {
    appletContext = applet.getAppletContext();
    threadGroup = Thread.currentThread().getThreadGroup();

    // Host to open server port to, e.g., us-game.xiangqi.com:
    serverHost = parameter("ServerHost", applet.getCodeBase().getHost());
    // Help docs etc, e.g., http://xiangqi.com
    serverWeb = parameter("ServerWeb", "http://"+serverHost);
    // Local sounds and images, e.g., http://us-game.xiangqi.com/~xiangqi
    serverLocal = parameter("ServerLocal", "http://"+serverHost);

    serverPort = parameter("ServerPort",4998);
    debug = parameter("Debug");
    verbose = parameter("Verbose");
    // Preferred UI language to load from http://xiangqi.com/msg/
    language = parameter("language", "english");

    String username = parameter("Username","");
    String password = parameter("Password","");
    tryLogin(username,password);
  }

  // ----------------------------------------------------------------
  private void tryLogin(String username, String password) {
    try {
      feedback("Connecting to "+serverHost+"...");
      club = new Club(username,password,
		      serverHost,serverPort,
		      true,boot,threadGroup,debug,verbose);
      if (!club.connect()) {
	feedback("Could not connect to "+serverHost +" on port " + serverPort);
	return;
      }
      bar.tick("Connected to "+serverHost);
      feedback("Trying login...");
      club.login(false);
      bar.tick("Login sent.");
    } catch (Exception e) {
      feedback("Login error: "+e);
      Club.warning(e,"Login.login");
    }
  }

  /** Posted in About applet dialog by browser or applet viewer. */
  /// BUG: these methods need to be in the Applet classs! 
  public String getAppletInfo() {
    return "Game Page Network Login Applet, 02may98\n" +
      "See http://gamepage.net";
  }

  private void feedback(String str) {
    boot.status(str);
  }

  private String parameter(String name, String defaultValue) {
    String retval = applet.getParameter(name);
    return( retval==null ? defaultValue : retval );
  }
  private boolean parameter(String name) {
    String value = applet.getParameter(name);
    boolean retval = (value==null ?
		      false :
		      value.equalsIgnoreCase("true"));
    if (retval)
      System.out.println("Club Login "+name+" true");
    return retval;
  }
  private int parameter(String name, int defaultValue) {
    String value = applet.getParameter(name);
    return( value==null ?
	    defaultValue :
	    Club.atoi(value) );
  }
}
