package com.tootsville.joshua.client.service;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.tootsville.gwt.joshua.client.util.Parent;
import com.tootsville.gwt.joshua.client.util.Person;
import com.tootsville.gwt.joshua.client.util.User;

public interface JoshuaServiceAsync {

	/**
	 * 
	 * TODO: document this method (theys, Oct 13, 2009)
	 * 
	 * @param userID
	 * @param callback
	 */
	void approve (int userID, AsyncCallback <Void> callback);

	void associateChild (String mail, String newUserName,
			AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 16, 2009)
	 * 
	 * @param userID
	 * @param lifeguardID
	 * @param reason
	 * @param callback
	 */
	void banOrUnban (int userID, int lifeguardID, String reason,
			AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 16, 2009)
	 * 
	 * @param userID
	 * @param lifeguardID
	 * @param reason
	 * @param callback
	 */
	void cancelUser (int userID, AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param parent
	 * @param callback
	 */
	void createNewParent (Parent parent, AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param person
	 * @param callback
	 */
	void createNewStaff (User person, AsyncCallback <Void> callback);

	void createOrEditUser (User user, boolean createOrEdit,
			AsyncCallback <Void> callback);

	void getKey (AsyncCallback <byte []> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param searchParam
	 * @param callback
	 */
	void getPerson (String searchParam, AsyncCallback <Person> callback);

	/**
	 * Retrieve version ID from server
	 * 
	 * @param callback
	 */
	void getVersion (AsyncCallback <String> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param userID
	 * @param months
	 * @param callback
	 */
	void giftTime (int userID, int months, AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param numNuts
	 * @param userID
	 * @param callback
	 */
	void givePeanuts (long numNuts, int userID,
			AsyncCallback <String> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param username
	 * @param password
	 * @param callback
	 */
	void loginStaff (String username, String password,
			AsyncCallback <User> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param userID
	 * @param isUser
	 * @param callback
	 */
	void remindPassword (int userID, boolean isUser,
			AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 6, 2009)
	 * 
	 * @param userID
	 * @param isUser
	 * @param callback
	 */
	void resetPassword (int userID, boolean isUser,
			AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 16, 2009)
	 * 
	 * @param userID
	 * @param newMail
	 * @param callback
	 */
	void setMail (int userID, String newMail,
			AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 16, 2009)
	 * 
	 * @param userID
	 * @param newMail
	 * @param callback
	 */
	void setParent (int userID, String newMail,
			AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 13, 2009)
	 * 
	 * @param eMail
	 * @param callback
	 */
	void verifyMail (String eMail, AsyncCallback <Void> callback);

	/**
	 * 
	 * TODO: document this method (theys, Oct 13, 2009)
	 * 
	 * @param userName
	 * @param callback
	 */
	void verifyUserName (String userName, AsyncCallback <Void> callback);

}
