package com.tootsville.tootsbook.client;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.tootsville.tootsbook.client.util.AvailableItems;
import com.tootsville.tootsbook.client.util.Post;
import com.tootsville.tootsbook.client.util.StoreInventory;
import com.tootsville.tootsbook.client.util.UserProfile;

/**
 * The async counterpart of <code>{@link BookService}</code>.
 * 
 * @author <a href="mailto:twheys@gmail.com@resinteractive.com">Tim
 *         Heys</a>
 */
public interface BookServiceAsync {
	/**
	 * @see BookService#addComment(Post)
	 * @param post WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void addComment (Post post, AsyncCallback <Post> callback);

	/**
	 * @see BookService#addPost(int, Post)
	 * @param toUserID WRITEME twheys@gmail.com
	 * @param post WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void addPost (final int toUserID, Post post,
			AsyncCallback <Post> callback);

	/**
	 * @see BookService#applyItems(int, int, int, int, int)
	 * @param pageBGSlotNum WRITEME twheys@gmail.com
	 * @param boxStylesSlotNum WRITEME twheys@gmail.com
	 * @param iconSlotNum WRITEME twheys@gmail.com
	 * @param titleBGSlotNum WRITEME twheys@gmail.com
	 * @param avatarBGSlotNum WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void applyItems (int pageBGSlotNum, int boxStylesSlotNum,
			int iconSlotNum, int titleBGSlotNum, int avatarBGSlotNum,
			AsyncCallback <Void> callback);

	/**
	 * @see BookService#checkSession()
	 * @param callback WRITEME twheys@gmail.com
	 */
	void checkSession (AsyncCallback <UserProfile> callback);

	/**
	 * @see BookService#deletePost(int, Post)
	 * @param id WRITEME twheys@gmail.com
	 * @param post WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void deletePost (int id, Post post, AsyncCallback <Post> callback);

	/**
	 * @see BookService#getAdminConsolePosts(int)
	 * @param numberOfDisplayedPosts WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getAdminConsolePosts (int numberOfDisplayedPosts,
			AsyncCallback <Post []> callback);

	/**
	 * @see BookService#getAvailableThemeItems()
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getAvailableThemeItems (AsyncCallback <AvailableItems> callback);

	/**
	 * @see BookService#getBuddyPosts(int)
	 * @param userID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getBuddyPosts (int userID, AsyncCallback <Post []> callback);

	/**
	 * WRITEME twheys@gmail.com
	 * 
	 * @param storeID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getInventoryForStore (int storeID,
			AsyncCallback <StoreInventory> callback);

	/**
	 * @see BookService#getMoreBuddyPosts(int, int)
	 * @param userID WRITEME twheys@gmail.com
	 * @param start WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getMoreBuddyPosts (int userID, int start,
			AsyncCallback <Post []> callback);

	/**
	 * @see BookService#getMorePosts(int, int)
	 * @param userID WRITEME twheys@gmail.com
	 * @param start WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getMorePosts (int userID, int start,
			AsyncCallback <Post []> callback);

	/**
	 * @see BookService#getNewHomePosts
	 * @param mostRecentPostID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getNewHomePosts (final int mostRecentPostID,
			AsyncCallback <Post []> callback);

	/**
	 * @see BookService#getNewProfilePosts
	 * @param profileID WRITEME twheys@gmail.com
	 * @param mostRecentPostID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getNewProfilePosts (final int profileID,
			final int mostRecentPostID, AsyncCallback <Post []> callback);

	/**
	 * <pre>
	 * twheys@gmail.com Mar 1, 2010
	 * </pre>
	 * 
	 * TO getPeanutsForUser WRITEME...
	 * 
	 * @param userID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getPeanutsForUser (int userID, AsyncCallback <Integer> callback);

	/**
	 * @see BookService#getPosts(int)
	 * @param userID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getPosts (int userID, AsyncCallback <Post []> callback);

	/**
	 * @see BookService#getUser(int)
	 * @param userID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void getUser (int userID, AsyncCallback <UserProfile> callback);

	/**
	 * @see BookService#login(String, String)
	 * @param userName WRITEME twheys@gmail.com
	 * @param password WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void login (final String userName, final String password,
			AsyncCallback <UserProfile> callback);

	/**
	 * @see BookService#logout()
	 * @param callback WRITEME twheys@gmail.com
	 */
	void logout (AsyncCallback <Void> callback);

	/**
	 * WRITEME: Document this method brpocock@star-hope.org
	 * 
	 * @param itemID WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void purchaseItem (int itemID, AsyncCallback <Void> callback);

	/**
	 * @param post WRITEME twheys@gmail.com WRITEME twheys@gmail.com
	 * @param callback WRITEME twheys@gmail.com
	 */
	void reportPost (Post post, AsyncCallback <Post> callback);

}
