package me.happypikachu.TorchLight;

import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;

public class TLPlayer implements Listener {
	private TL plugin;
	public TLPlayer(TL plugin) {
		this.plugin = plugin;
	}
	int prevX;
	int prevY;
	int prevZ;
	
	@EventHandler
	public void onPlayerLogin(PlayerLoginEvent event) {
		if (plugin.getConfig().getBoolean("Worlds." + event.getPlayer().getWorld().getName()) || event.getPlayer().isOp()) {
			if (plugin.getConfig().getBoolean("Plugin.enable-on-login")) {
				plugin.isUsing.add(event.getPlayer());
			}
		}
	}
	
	@EventHandler
	public void onPlayerQuit(PlayerQuitEvent event) {
		if (plugin.getConfig().getBoolean("Worlds." + event.getPlayer().getWorld().getName()) || event.getPlayer().isOp()) {
			if (this.plugin.isUsing.contains(event.getPlayer())) {
				CraftBlock block = (CraftBlock)event.getPlayer().getLocation().getBlock();
				if (block != null) {
					int x = block.getX();
					int y = block.getY();
					int z = block.getZ();
					TL.resetLight(x, y + 1, z, (CraftWorld)event.getPlayer().getWorld(), event.getPlayer());
				}
				plugin.isUsing.remove(event.getPlayer());
			}
		}
	}

	@EventHandler
	public void onItemHeldChange(PlayerItemHeldEvent event) {
		if (plugin.getConfig().getBoolean("Worlds." + event.getPlayer().getWorld().getName()) || event.getPlayer().isOp()) {
			if (this.plugin.isUsing.contains(event.getPlayer())) {
				CraftBlock block = (CraftBlock)event.getPlayer().getLocation().getBlock();
				if (block != null) {
					int x = block.getX();
					int y = block.getY();
					int z = block.getZ();
					if (event.getPlayer().getInventory().getItem(event.getNewSlot()) != null) {
						if (plugin.isValid(event.getPlayer().getInventory().getItem(event.getNewSlot()).getTypeId())) {
							TL.lightUp(x, y + 1, z, 15, 3, (CraftWorld)event.getPlayer().getWorld(), event.getPlayer());
						} else {
							TL.resetLight(x, y + 1, z, (CraftWorld)event.getPlayer().getWorld(), event.getPlayer());
						}
					} else {
						TL.resetLight(x, y + 1, z, (CraftWorld)event.getPlayer().getWorld(), event.getPlayer());
					}
				}
			}
		}
	}

	@EventHandler
	public void onPlayerMove(PlayerMoveEvent event) {
		if (plugin.getConfig().getBoolean("Worlds." + event.getPlayer().getWorld().getName()) || event.getPlayer().isOp()) {
			if (this.plugin.isUsing.contains(event.getPlayer())) {
				CraftBlock block = (CraftBlock)event.getPlayer().getLocation().getBlock();
				if (block != null) {
					int x = block.getX();
					int y = block.getY();
					int z = block.getZ();
					if (prevX != x || prevY != y || prevZ != z) {
						prevX = x;
						prevY = y;
						prevZ = z;
						if (plugin.isValid(event.getPlayer().getItemInHand().getTypeId())) {
							TL.lightUp(x, y + 1, z, 15, 3, (CraftWorld)event.getPlayer().getWorld(), event.getPlayer());
						}
					}
				}
			}
		}	
	}
}