/**
 * 
 */
package pt.quantum.padroes.client.session;

import java.util.Date;

import pt.quantum.padroes.client.services.LoginService;
import pt.quantum.padroes.client.services.LoginServiceAsync;
import pt.quantum.padroes.client.util.LogUtils;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * @author brunolopes
 *
 */
public class UserIdleTimeOutControl {

	    Timer mInactivityTimer;
	    HandlerRegistration mHandlerRegistration;
	    int mTimeoutInMillis = 30000;
	    
	    public UserIdleTimeOutControl() {

	        mInactivityTimer = new Timer() {
	            @Override
	            public void run() {
	                // Logout
//	                Window.alert("Logout");
	                mHandlerRegistration.removeHandler();
	                mInactivityTimer.cancel();
	                LoginServiceAsync service = GWT.create(LoginService.class);
	    			service.logout(new AsyncCallback<Void>() {
						@Override
						public void onFailure(Throwable caught) {
							LogUtils.error(caught.getMessage());
							LogUtils.loggingOut();
						}

						@Override
						public void onSuccess(Void result) {
							LogUtils.loggingOut();
						}
					});
	               
	            }
	        };
	        mInactivityTimer.schedule(mTimeoutInMillis);

	        NativePreviewHandler handler;
	        handler = new NativePreviewHandler() {
	            @Override
	            public void onPreviewNativeEvent(NativePreviewEvent event) {
	                mInactivityTimer.schedule(mTimeoutInMillis);
	                System.out.println("Event fired: " + new Date());
	         		
	            }
	        };
	        mHandlerRegistration = Event.addNativePreviewHandler(handler);
	    }
	}

