package me.craftersforever.bloodskreaper;

import java.util.Date;
import java.util.HashMap;
import java.util.UUID;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.plugin.java.JavaPlugin;



public class Main extends JavaPlugin implements Listener{
private HashMap <UUID,Date> schutzzeit = new HashMap<UUID, Date>();

	public void onEnable(){
		this.saveDefaultConfig();
	    getServer().getPluginManager().registerEvents(this, this);
	    System.out.println("Schutzzeitplugin von BloodSKreaper, Leiter von CraftersForever");
	    this.startSheduler();

	}
	
	@EventHandler
	public void onJoin(PlayerJoinEvent e){
		Player p = e.getPlayer();
		if(p.hasPermission("schutzzeit.use")){
			if(schutzzeit.containsKey(p.getUniqueId())){
				schutzzeit.replace(p.getUniqueId(), this.getCurrentDate());
			}else{
				schutzzeit.put(p.getUniqueId(), this.getCurrentDate());
			}
		p.sendTitle("§2Schutzzeit gestartet!", "§6"+this.getConfig().getInt("schutzzeit")+" Sekunden!", 10 , 70, 20);
		}

	}
	
	@EventHandler
	public void onRespawn(PlayerRespawnEvent e){
		Player p = e.getPlayer();
		if(p.hasPermission("schutzzeit.use")){
			if(schutzzeit.containsKey(p.getUniqueId())){
				schutzzeit.replace(p.getUniqueId(), this.getCurrentDate());
			}else{
				schutzzeit.put(p.getUniqueId(), this.getCurrentDate());
			}
		p.sendTitle("§2Schutzzeit gestartet!", "§6"+this.getConfig().getInt("schutzzeit")+" Sekunden!", 10 , 70, 20);
		}

	}
	@EventHandler
	public void onDamageEvent(EntityDamageEvent e){
		if(e.getEntity() instanceof Player){
			Player p = (Player) e.getEntity();
			if(p.hasPermission("schutzzeit.use") && schutzzeit.containsKey(p.getUniqueId())){
				e.setCancelled(true);
				if(e instanceof EntityDamageByEntityEvent){
					EntityDamageByEntityEvent dmgevent = (EntityDamageByEntityEvent) e;
					if(dmgevent.getDamager() instanceof Player){
						Player dmger = (Player) dmgevent.getDamager();
						dmger.sendTitle("§4Angriff fehlgeschlagen!", "§6"+p.getName()+" §awird geschützt!", 0, 40, 10);
					}
				}
			}
		}
	}
	
	@EventHandler
	public void onPlayerHitEvent(EntityDamageByEntityEvent e){
		if(e.getDamager() instanceof Player && e.getEntity() instanceof Player){
			Player p = (Player) e.getDamager();
		
		if(p.hasPermission("schutzzeit.use") && schutzzeit.containsKey(p.getUniqueId())){
			e.setCancelled(true);
			p.sendTitle("§4Angriff fehlgeschlagen!", "§6Du §awirst geschützt!", 0, 40, 10);
		}
		}
	}

	
	public Date getCurrentDate(){
		Date date = new Date();
		return date;
	}
	
	public int getDifferenceinseconds(Date date){
		Date last = date;
		Date now = this.getCurrentDate();
		long diff = now.getTime() - last.getTime();
		long diffsec = diff / 1000;
		int diffwholesec = (int) diffsec;
		return diffwholesec;
		
	}
	
	public void checkschutzzeit(UUID uuid){
		int difference = this.getDifferenceinseconds(schutzzeit.get(uuid));
		int zeit = this.getConfig().getInt("schutzzeit");
		if(difference > zeit){
			schutzzeit.remove(uuid);
			if(this.getServer().getPlayer(uuid) != null){
				Player p = this.getServer().getPlayer(uuid);
				p.sendTitle("§4Schutzzeit abgelaufen!", "§6Du erleidest jetzt Schaden!", 0 , 70, 30);
			}	
		}else if (difference == zeit){
			if(this.getServer().getPlayer(uuid) != null){
				Player p = this.getServer().getPlayer(uuid);
				p.sendTitle("§2Schutzzeit läuft gleich ab!", "§60 Sekunden!", 0 , 20, 30);
			}	
			
		}else if (difference == zeit-1){
			if(this.getServer().getPlayer(uuid) != null){
				Player p = this.getServer().getPlayer(uuid);
				p.sendTitle("§2Schutzzeit läuft gleich ab!", "§61 Sekunden!", 0 , 20, 30);
			}	
			
		}else if (difference == zeit-2){
			if(this.getServer().getPlayer(uuid) != null){
				Player p = this.getServer().getPlayer(uuid);
				p.sendTitle("§2Schutzzeit läuft gleich ab!", "§62 Sekunden!", 0 , 20, 30);
			}	
		}else if (difference == zeit-3){
			if(this.getServer().getPlayer(uuid) != null){
				Player p = this.getServer().getPlayer(uuid);
				p.sendTitle("§2Schutzzeit läuft gleich ab!", "§63 Sekunden!", 0 , 20, 30);
			}	
		}else if (difference == zeit-4){
			if(this.getServer().getPlayer(uuid) != null){
				Player p = this.getServer().getPlayer(uuid);
				p.sendTitle("§2Schutzzeit läuft gleich ab!", "§64 Sekunden!", 0 , 20, 30);
			}
			}else if (difference == zeit-5){
				if(this.getServer().getPlayer(uuid) != null){
					Player p = this.getServer().getPlayer(uuid);
					p.sendTitle("§2Schutzzeit läuft gleich ab!", "§65 Sekunden!", 0 , 20, 30);
				}
			}else if (difference == zeit-10){
				if(this.getServer().getPlayer(uuid) != null){
					Player p = this.getServer().getPlayer(uuid);
					p.sendTitle("§2Schutzzeit läuft bald ab!", "§610 Sekunden!", 5 , 40, 30);
				}	
			}
		
	}

	
	@SuppressWarnings("deprecation")
	public void startSheduler(){
	this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {
		public void run() {
			for(UUID uuid: schutzzeit.keySet()){
				checkschutzzeit(uuid);
			}
		}
		}, 0L, 20L);
	
	
	}

	

}
