package com.mcf.davidee.nbtedit;

import java.util.logging.Level;

import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.command.WrongUsageException;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;

import com.mcf.davidee.nbtedit.packets.EntityRequestPacket;
import com.mcf.davidee.nbtedit.packets.MouseOverPacket;
import com.mcf.davidee.nbtedit.packets.TileRequestPacket;


public class CommandNBTEdit extends CommandBase{

	@Override
	public String getCommandName() {
		return "nbtedit";
	}
	@Override
	public String getCommandUsage(ICommandSender par1ICommandSender)
	{
		return "/nbtedit OR /nbtedit <EntityId> OR /nbtedit <TileX> <TileY> <TileZ>";
	}

	@Override
	public void processCommand(ICommandSender sender, String[] var2) {
		if (sender instanceof EntityPlayerMP) {
			EntityPlayerMP player = (EntityPlayerMP)sender;

			if (var2.length == 3) {
				int x = parseInt(sender,var2[0]);
				int y = parseInt(sender,var2[1]);
				int z = parseInt(sender,var2[2]);
				NBTEdit.log(Level.FINE, sender.getCommandSenderName() + " issued command \"/nbtedit " + x + " " + y + " " + z + "\"");
				new TileRequestPacket(x, y, z).handleServerSide(player);
			}
			else if (var2.length == 1) {
				int entityID = (var2[0].equalsIgnoreCase("me")) ? player.getEntityId() : parseIntWithMin(sender, var2[0], 0);
				NBTEdit.log(Level.FINE, sender.getCommandSenderName() + " issued command \"/nbtedit " + entityID +  "\"");
				new EntityRequestPacket(entityID).handleServerSide(player);
			}
			else if (var2.length == 0) {
				NBTEdit.log(Level.FINE, sender.getCommandSenderName() + " issued command \"/nbtedit\"");
				NBTEdit.DISPATCHER.sendTo(new MouseOverPacket(), player);
			}
			else  {
				String s = "";
				for (int i =0; i < var2.length; ++i) {
					s += var2[i];
					if (i != var2.length - 1)
						s += " ";
				}
				NBTEdit.log(Level.FINE, sender.getCommandSenderName() + " issued invalid command \"/nbtedit " + s + "\"");
				throw new WrongUsageException("Pass 0, 1, or 3 integers -- ex. /nbtedit", new Object[0]);
			}
		}
	}

	public boolean canCommandSenderUseCommand(ICommandSender s) {
		return s instanceof EntityPlayer && (super.canCommandSenderUseCommand(s) || !NBTEdit.opOnly && ((EntityPlayer)s).capabilities.isCreativeMode);
	}

}