package net.mc_pandacraft.java.plugin.pandacraftutils.simple_commands.setblock;

import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;

import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;

public class CommandSetblock implements CommandExecutor {
	private PandacraftUtils plugin;

	public CommandSetblock(PandacraftUtils pl)
	{
		plugin = pl;
		plugin.getCommand("setblock").setExecutor(this);
	}

	
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
	{
		if (sender instanceof Player)
		{
			if (sender.hasPermission("pandacraft.setblock"))
			{
				if (args.length >= 4)
				{
					int x, y, z;
					try
					{
						x = Integer.parseInt(args[0]);
						y = Integer.parseInt(args[1]);
						z = Integer.parseInt(args[2]);
					}
					catch (NumberFormatException e)
					{
						sender.sendMessage("§cLes coordonnées doivent être des chiffres :");
						return false;
					}
					
					Material mat = Material.matchMaterial(args[3]);
					if (mat == null)
					{
						sender.sendMessage("§cLe type de bloc indiqué n'existe pas :");
						return false;
					}
					
					World w = ((Player)sender).getWorld();
					if (args.length >= 5 && plugin.getServer().getWorld(args[4]) != null)
						w = plugin.getServer().getWorld(args[4]);
					
					w.getBlockAt(x, y, z).setType(mat);
					sender.sendMessage("Bloc changé en "+mat+" à l'endroit "+(new Location(w, x, y, z)));
				}
				else
				{
					sender.sendMessage("§cPas assez de paramètres :");
					return false;
				}
			}
			else
				sender.sendMessage("§cVous n'avez pas la permission");
		}
		else if (sender instanceof BlockCommandSender)
		{
			if (args.length >= 4)
			{
				int x, y, z;
				try
				{
					x = Integer.parseInt(args[0]);
					y = Integer.parseInt(args[1]);
					z = Integer.parseInt(args[2]);
				}
				catch (NumberFormatException e)
				{
					sender.sendMessage("§cLes coordonnées doivent être des chiffres");
					return false;
				}
				
				Material mat = Material.matchMaterial(args[3]);
				if (mat == null)
				{
					sender.sendMessage("§cLe type de bloc indiqué n'existe pas");
					return false;
				}
				
				World w = ((BlockCommandSender)sender).getBlock().getWorld();
				if (args.length >= 5 && plugin.getServer().getWorld(args[4]) != null)
					w = plugin.getServer().getWorld(args[4]);
				
				w.getBlockAt(x, y, z).setType(mat);
				sender.sendMessage("Bloc changé en "+mat+" à l'endroit "+(new Location(w, x, y, z)));
			}
			else
			{
				sender.sendMessage("§cPas assez de paramètres");
				return false;
			}
		}
		else if (sender instanceof ConsoleCommandSender)
		{
			if (args.length >= 5)
			{
				int x, y, z;
				try
				{
					x = Integer.parseInt(args[0]);
					y = Integer.parseInt(args[1]);
					z = Integer.parseInt(args[2]);
				}
				catch (NumberFormatException e)
				{
					sender.sendMessage("§cLes coordonnées doivent être des chiffres :");
					return false;
				}

				Material mat = Material.matchMaterial(args[3]);
				if (mat == null)
				{
					sender.sendMessage("§cLe type de bloc indiqué n'existe pas :");
					return false;
				}
				World w = plugin.getServer().getWorld(args[4]);
				if (w == null)
				{
					sender.sendMessage("§cLe monde indiqué n'existe pas :");
					return false;
				}
				
				w.getBlockAt(x, y, z).setType(mat);
			}
			else
			{
				sender.sendMessage("§cPas assez de paramètres :");
				return false;
			}
		}
		return true;
	}

}
