/**
 * Copyright © 2010, Res Interactive, LLC. All Rights Reserved.
 */
package com.tootsville.npc;

import java.util.concurrent.atomic.AtomicInteger;

import org.json.JSONObject;
import org.starhope.appius.except.GameLogicException;
import org.starhope.appius.except.NotFoundException;
import org.starhope.appius.except.PrivilegeRequiredException;
import org.starhope.appius.except.UserDeadException;
import org.starhope.appius.game.AppiusClaudiusCaecus;
import org.starhope.appius.game.Zone;
import org.starhope.appius.room.Room;
import org.starhope.appius.room.RoomListener;
import org.starhope.appius.user.AbstractNonPlayerCharacter;
import org.starhope.appius.user.AbstractUser;

/**
 * A dishwasher at the diner.
 * 
 * @see ShortOrderCook
 * @author brpocock@star-hope.org
 */
public class DinerDishWasher extends AbstractNonPlayerCharacter {

	/**
	 * <p>
	 * Provide an unique ID counter for multiple instances of the same
	 * cook character in different Zones at the same time.
	 * </p>
	 */
	private static AtomicInteger nextID = new AtomicInteger (0);
	/**
	 * WRITEME: Document this brpocock@star-hope.org
	 */
	private static final long serialVersionUID = 8711732839063374312L;

	/**
	 * WRITEME: Document this constructor brpocock@star-hope.org
	 *
	 * @throws GameLogicException WRITEME
	 * @throws NotFoundException WRITEME
	 */
	public DinerDishWasher () throws NotFoundException,
	GameLogicException {
		super ("$FIXME");
	}

	/**
	 * @see org.starhope.appius.user.AbstractUser#acceptMessage(java.lang.String, java.lang.String, java.lang.String)
	 */
	@Override
	public void acceptMessage (final String title, final String label,
			final String content) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptMessage (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptObjectJoinRoom(org.starhope.appius.room.Room, org.starhope.appius.room.RoomListener)
	 */
	@Override
	public void acceptObjectJoinRoom (final Room room,
			final RoomListener object) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptObjectJoinRoom (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptObjectPartRoom(org.starhope.appius.room.Room, org.starhope.appius.room.RoomListener)
	 */
	@Override
	public void acceptObjectPartRoom (final Room room,
			final RoomListener thing) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptObjectPartRoom (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptOutOfBandMessage(org.starhope.appius.user.AbstractUser, org.starhope.appius.room.Room, org.json.JSONObject)
	 */
	@Override
	public void acceptOutOfBandMessage (final AbstractUser sender,
			final Room room, final JSONObject body) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptOutOfBandMessage (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptPublicMessage(org.starhope.appius.user.AbstractUser, org.starhope.appius.room.Room, java.lang.String)
	 */
	@Override
	public void acceptPublicMessage (final AbstractUser sender,
			final Room room, final String message) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptPublicMessage (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptPublicMessage(org.starhope.appius.user.AbstractUser, java.lang.String)
	 */
	@Override
	public void acceptPublicMessage (final AbstractUser from, final String message) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptPublicMessage (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptUserVariableUpdate(org.starhope.appius.user.AbstractUser, java.lang.String, java.lang.String)
	 */
	@Override
	public void acceptUserVariableUpdate (final AbstractUser user,
			final String varName, final String varValue) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::acceptUserVariableUpdate (brpocock@star-hope.org, Jul 7, 2010)");

	}
	/**
	 * @see org.starhope.appius.user.AbstractUser#ban(org.starhope.appius.user.AbstractUser, java.lang.String)
	 */
	@Override
	public void ban (final AbstractUser u, final String banReason)
	throws PrivilegeRequiredException {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::ban (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.user.AbstractNonPlayerCharacter#getInstanceID()
	 */
	@Override
	protected int getInstanceID () {
		return DinerDishWasher.nextID.incrementAndGet ();
	}


	/**
	 * @see org.starhope.appius.user.AbstractUser#sendEarnings(org.starhope.appius.room.Room, java.lang.String)
	 */
	@Override
	public void sendEarnings (final Room room, final String string) {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::sendEarnings (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.user.AbstractUser#sendMigrate(org.starhope.appius.types.AbstractZone)
	 */
	@Override
	public void sendMigrate (final Zone refugeeZone)
	throws UserDeadException {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::sendMigrate (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.user.AbstractUser#sendWardrobe()
	 */
	@Override
	public void sendWardrobe () {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::sendWardrobe (brpocock@star-hope.org, Jul 7, 2010)");

	}

	/**
	 * @see org.starhope.appius.util.AcceptsMetronomeTicks#tick(long, long)
	 */
	@Override
	public void tick (final long currentTime, final long deltaTime)
	throws UserDeadException {
		// TODO Auto-generated method stub brpocock@star-hope.org
		AppiusClaudiusCaecus
		.reportBug ("unimplemented DinerDishWasher::tick (brpocock@star-hope.org, Jul 7, 2010)");

	}

}
