package authoritymanager.client;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextBox;

public class LoginPage extends Page {
	private DialogBox dlgLogin ;
	private TextBox txtUsername ;
	private PasswordTextBox txtPassword ;
	
	public LoginPage(AuthorityManagerView authorityManagerView) {
		super(authorityManagerView) ;
		
		dlgLogin = new DialogBox();
		dlgLogin.setText("Login...");
		dlgLogin.setTitle("Login...");
		dlgLogin.setWidth("250px");
		dlgLogin.setHeight("150px");
		FlexTable pnlLogin = new FlexTable();
		pnlLogin.setWidth("290px");
		pnlLogin.setHeight("120px");
		pnlLogin.setCellSpacing(2);
		dlgLogin.add(pnlLogin);

		Label lblUsername = new Label("Username: ");
		txtUsername = new TextBox();
		Label lblPassword = new Label("Password: ");
		txtPassword = new PasswordTextBox();
		pnlLogin.setWidget(0, 0, lblUsername);
		pnlLogin.setWidget(0, 1, txtUsername);
		pnlLogin.setWidget(1, 0, lblPassword);
		pnlLogin.setWidget(1, 1, txtPassword);

		Button btnLogin = new Button("Login", new ClickHandler() {
			public void onClick(ClickEvent event) {
				String username = txtUsername.getValue() ;
				//String password = BCrypt.hashpw(txtPassword.getValue(), BCrypt.gensalt()) ;
				String password = txtPassword.getValue() ;
				AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
					public void onFailure(Throwable caught) {
					}
					public void onSuccess(Boolean result) {
						if (result.booleanValue()) {
							dlgLogin.hide();
							view.showServerStatusPage();
						}
						else {
							PopupPanel pnlError = new PopupPanel(true) ;
							Label lblError = new Label("Login error.") ;
							pnlError.add(lblError) ;
							pnlError.center() ;
							pnlError.show()	 ;
						}
					}
				} ;
				view.getController().login(username, "", password, callback);
			}
		});
		Button btnRegister = new Button("Sign up", new ClickHandler() {
			public void onClick(ClickEvent event) {
				dlgLogin.hide();
				view.showSignupPage();
			}
		});
		pnlLogin.setWidget(2, 0, btnLogin);
		pnlLogin.setWidget(2, 1, btnRegister);
	}
	
	public void show() {
		txtUsername.setText("") ;
		txtPassword.setText("") ;
		dlgLogin.center();
	}
}
