import java.awt.*;
import marimba.gui.*;

class LoginPanel extends AgoraPanel {

    LoginPanel (AgoraClientSession theSession) {
        super (theSession);
		setText("Login");
    }

	public void init() {
		super.init();
        status=new TextBoxWidget("Logging in to " + session.getGroup() + " hosted on " + session.getConnection().getHost() + ".");
		add(status,true,2,8,357,15);
        int vertical = 38, horizontal = 2;

        add(new TextBoxWidget("Login:"),true,horizontal,vertical + 3,100,15);
        loginEdit=new EchoTextBoxWidget("",true,TextBoxWidget.FILLED);
        vertical += add(loginEdit,false,horizontal + 100,vertical,140,19).height;

        add(new TextBoxWidget("Password:"),true,horizontal,vertical + 3,100,15);
        passwordEdit=new EchoTextBoxWidget("",true,TextBoxWidget.FILLED);
        passwordEdit.setEchoCharacter ('*');
        vertical += add (passwordEdit,false,horizontal + 100,vertical,140,19).height;

        ok=new CommandButtonWidget ("Ok");
		ok.setDefault(true);
        add (ok,true,bounds().width - 135,bounds().height - 20,60,15);
        bye=new CommandButtonWidget ("Cancel");
        add (bye,true,bounds().width - 65,bounds().height - 20,60,15);
	}

    public void layout() {
        ok.reshape (bounds().width - 145,bounds().height - 20,60,15);
        bye.reshape (bounds().width - 75,bounds().height - 20,60,15);
    }

    public void activate() {
        if (session.login != null) loginEdit.setText(session.login);
        if (session.password != null) passwordEdit.setText(session.password);
        session.verified = false;
    	session.loggedIn = false;
        super.activate();
    }

	public void defaultAction() {
    	AgoraEvent evt = new AgoraEvent (AgoraEvent.LOGIN);
    	//evt.addArgument (session.getGroup());
    	evt.addArgument (loginEdit.getText());
    	evt.addArgument (passwordEdit.getText());

    	AgoraEvent retEvt = getResponse(evt);

    	if (retEvt != null) {
    		String response = retEvt.getArgument(0);
    		if (response.equalsIgnoreCase("yes")) {
    			session.login = loginEdit.getText();
    			session.password = passwordEdit.getText();
    			session.verified = true;
    			session.loggedIn = true;
    			AgoraEvent init = new AgoraEvent (AgoraEvent.INITIALIZE);
    			init.setLocal();
    			broadcastEvent(init);
                activatePanel(Agora.LISTPANEL);
    		}
    		else if (response.equalsIgnoreCase("unknown")) {
    			session.login = loginEdit.getText();
    			session.password = passwordEdit.getText();
    			session.verified = false;
    			session.loggedIn = false;
                activatePanel(Agora.INFOPANEL);
    		}
    		else if (response.equalsIgnoreCase("join")) {
    			session.login = loginEdit.getText();
    			session.password = passwordEdit.getText();
    			session.verified = true;
    			session.loggedIn = false;
    			retEvt.setId(AgoraEvent.GETINFO);
    			retEvt.removeFirstArgument();
    			retEvt.setLocal();
    			broadcastEvent(retEvt);
                activatePanel(Agora.INFOPANEL);
    		}
    		else {
    		    displayError ("Incorrect password");
    		}
    	}
	}

	public void cancelAction() {
		session.disconnect();
    	System.exit(0);
	}

    public boolean handleEvent(Event event) {
		if ((event.id == Event.ACTION_EVENT))
		{
			if (event.target == ok) {
				defaultAction();
    			return true;
			}
			else if (event.target == bye) {
			    cancelAction();
				return true;
			}
			return false;
		}
		else return super.handleEvent(event);
    }

    TextBoxWidget status;
    CommandButtonWidget ok;
    CommandButtonWidget bye;
    TextBoxWidget loginEdit;
    EchoTextBoxWidget passwordEdit;
}

