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

import java.math.BigInteger;

import org.json.JSONException;
import org.json.JSONObject;
import org.starhope.appius.except.AlreadyExistsException;
import org.starhope.appius.game.AppiusClaudiusCaecus;
import org.starhope.appius.game.GameEvent;
import org.starhope.appius.game.GameStateFlag;
import org.starhope.appius.game.Zone;
import org.starhope.appius.room.Room;
import org.starhope.appius.room.RoomListener;
import org.starhope.appius.user.AbstractUser;
import org.starhope.appius.user.Nomenclator;
import org.starhope.appius.util.AppiusConfig;

import com.tootsville.user.Toot;

/**
 * WRITEME: Document this type.
 * 
 * @author brpocock@star-hope.org
 */
public class ShadeHook implements RoomListener {

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptGameAction(org.starhope.appius.user.AbstractUser,
	 *      org.json.JSONObject)
	 */
	@Override
	public void acceptGameAction (final AbstractUser u,
			final JSONObject jso) {
		final int shadeHurts = AppiusConfig.getIntOrDefault (
				"com.tootsville.shade.hurts", 100);
		if (shadeHurts != 0) {
			try {
				if ("gotShot".equals (jso.getString ("action"))
						&& "shade".equals (jso.getString ("shooter"))
						&& u.getAvatarLabel ().equals (
								jso.getString ("victim"))) {
					try {
						if (u instanceof Toot) {
							((Toot) u).transferPeanuts (BigInteger
									.valueOf (shadeHurts).negate (),
									((Toot) Nomenclator
											.getUserByLogin ("Shade")),
									"shaddowFalls");
						}
					} catch (final AlreadyExistsException e) {
						AppiusClaudiusCaecus
								.reportBug (
										"Caught a AlreadyExistsException when getting molested by Shade: should not occur",
										e);
					}
				}
			} catch (final JSONException e) {
				AppiusClaudiusCaecus
						.reportBug (
								"Caught a JSONException in ShadeHook.acceptGameAction ",
								e);
			}
		}
	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptGameStateChange(org.starhope.appius.game.GameEvent,
	 *      org.starhope.appius.game.GameStateFlag)
	 */
	@Override
	public void acceptGameStateChange (final GameEvent gameCode,
			final GameStateFlag gameState) {
		// TODO Auto-generated method stub brpocock@star-hope.org

	}

	/**
	 * @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

	}

	/**
	 * @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

	}

	/**
	 * @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

	}

	/**
	 * @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

	}

	/**
	 * @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

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#acceptUserAction(org.starhope.appius.room.Room, org.starhope.appius.user.AbstractUser)
	 */
	@Override
	public void acceptUserAction (final Room r, final AbstractUser u) {
		// no op
	}

	/**
	 * @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

	}

	/**
	 * @see org.starhope.appius.room.RoomListener#getRoom()
	 */
	@Override
	public Room getRoom () {
		// TODO Auto-generated method stub brpocock@star-hope.org
		return null;
	}

	/**
	 * @see org.starhope.appius.room.RoomListener#getZone()
	 */
	@Override
	public Zone getZone () {
		// TODO Auto-generated method stub brpocock@star-hope.org
		return null;
	}

}
