package com.taiter.ce.CItems;

/*
* This file is part of Custom Enchantments
* Copyright (C) Taiterio 2015
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/



import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable;



public class Powergloves extends CItem {

	int	ThrowSpeedMultiplier;
	int	ThrowDelayAfterGrab;
	int	MaxGrabtime;

	public Powergloves(String originalName, ChatColor color, String lDescription, long lCooldown, Material mat) {
		super(originalName, color, lDescription, lCooldown, mat);
		this.configEntries.put("ThrowSpeedMultiplier", 60);
		this.configEntries.put("ThrowDelayAfterGrab", 20);
		this.configEntries.put("MaxGrabtime", 10);
		triggers.add(Trigger.INTERACT_RIGHT);
		triggers.add(Trigger.INTERACT_ENTITY);
	}

	@Override
	public boolean effect(Event event, final Player player) {
		if(event instanceof PlayerInteractEntityEvent) {
			PlayerInteractEntityEvent e = (PlayerInteractEntityEvent) event;
			e.setCancelled(true);
			final Entity clicked = e.getRightClicked();
			if(!player.hasMetadata("ce." + getOriginalName()))
				if(!clicked.getType().equals(EntityType.PAINTING) && !clicked.getType().equals(EntityType.ITEM_FRAME) && clicked.getPassenger() != player && player.getPassenger() == null) {
					player.setMetadata("ce." + getOriginalName(), new FixedMetadataValue(main, false));

					player.setPassenger(clicked);

					player.getWorld().playEffect(player.getLocation(), Effect.ZOMBIE_CHEW_IRON_DOOR, 10);

					new BukkitRunnable() {

						@Override
						public void run() {
							player.getWorld().playEffect(player.getLocation(), Effect.CLICK2, 10);
							player.setMetadata("ce." + getOriginalName(), new FixedMetadataValue(main, true));
							this.cancel();
						}
					}.runTaskLater(main, ThrowDelayAfterGrab);

					new BukkitRunnable() {

						int			GrabTime	= MaxGrabtime;
						ItemStack	current		= player.getItemInHand();

						@Override
						public void run() {
							if(current.equals(player.getItemInHand())) {
								current = player.getItemInHand();
							if(GrabTime > 0) {
								if(!player.hasMetadata("ce." + getOriginalName())) {
									this.cancel();
								}
								GrabTime--;
							} else if(GrabTime <= 0) {
								if(player.hasMetadata("ce." + getOriginalName())) {
									player.getWorld().playEffect(player.getLocation(), Effect.CLICK1, 10);
									player.removeMetadata("ce." + getOriginalName(), main);
									generateCooldown(player, getCooldown());
								}
								clicked.leaveVehicle();
								this.cancel();
							}
						  } else {
							  player.removeMetadata("ce." + getOriginalName(), main);
							  generateCooldown(player, getCooldown());
							  this.cancel();
						  }
						}
					}.runTaskTimer(main, 0l, 10l);
				}
		} else if(event instanceof PlayerInteractEvent) {
			if(player.hasMetadata("ce." + getOriginalName()) && player.getMetadata("ce." + getOriginalName()).get(0).asBoolean())
					if(player.getPassenger() != null) {
						Entity passenger = player.getPassenger();
						player.getPassenger().leaveVehicle();
						passenger.setVelocity(player.getLocation().getDirection().multiply(ThrowSpeedMultiplier));
						player.getWorld().playEffect(player.getLocation(), Effect.ZOMBIE_DESTROY_DOOR, 10);
						player.removeMetadata("ce." + getOriginalName(), main);
						return true;
					}
		}
		return false;
	}

	@Override
	public void initConfigEntries() {
		ThrowDelayAfterGrab = Integer.parseInt(getConfig().getString("Items." + getOriginalName() + ".ThrowDelayAfterGrab"));
		MaxGrabtime = Integer.parseInt(getConfig().getString("Items." + getOriginalName() + ".MaxGrabtime"));
		ThrowSpeedMultiplier = Integer.parseInt(getConfig().getString("Items." + getOriginalName() + ".ThrowSpeedMultiplier"));
	}

}