package mc.mcgrizzz.prorecipes.gui;

import java.util.ArrayList;
import java.util.HashMap;

import mc.mcgrizzz.prorecipes.NBTChecker.MinecraftVersion;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;

import mc.mcgrizzz.prorecipes.ProRecipes;
import mc.mcgrizzz.prorecipes.api.RecipeContainer;
import mc.mcgrizzz.prorecipes.lib.ItemUtils;
import mc.mcgrizzz.prorecipes.lib.Messages;
import mc.mcgrizzz.prorecipes.lib.Pair;
import mc.mcgrizzz.prorecipes.recipes.RecipeChest;
import mc.mcgrizzz.prorecipes.recipes.RecipeFurnace;
import mc.mcgrizzz.prorecipes.recipes.RecipeShaped;
import mc.mcgrizzz.prorecipes.recipes.RecipeShapeless;

public class RecipeBuilder implements Listener{
	
	//Used for backup
	public HashMap<String, ItemStack> storedItems = new HashMap<String, ItemStack>();
	public Messages m;
	
	public RecipeBuilder(){
		m = ProRecipes.getPlugin().ms;
	}
	
	public void openRecipe(final Player p, ItemStack lookup){
		
		ItemStack[] matrix = null;
		
		//ProRecipes.getPlugin().getTippedArrowRec(lookup);
		
		if(ItemUtils.isVanilla(lookup)){
			org.bukkit.inventory.Recipe r = ItemUtils.findRecipe(lookup);
			matrix = ItemUtils.getMatrix(r);
			if(r == null || matrix == null){
				ItemBuilder.sendMessage(p, m.getMessage("Recipe_Lookup_Title", ChatColor.GOLD + "Recipe Lookup"), 
						m.getMessage("Recipe_Lookup_Failed", ChatColor.DARK_RED + "No Recipe Found!"));
				return;
			}
		}else{
			//System.out.println("CUSTOM");
			RecipeContainer r = ProRecipes.getPlugin().getRecipes().getRecipe(lookup);
			if(r == null){
				org.bukkit.inventory.Recipe re = ItemUtils.findRecipe(lookup);
				matrix = ItemUtils.getMatrix(re);
				if(re == null || matrix == null){
					if(lookup.getType() == Material.TIPPED_ARROW){
						matrix = ItemUtils.getTippedArrowRec(lookup);
					}else{
						ItemBuilder.sendMessage(p, m.getMessage("Recipe_Lookup_Title", ChatColor.GOLD + "Recipe Lookup"), 
								m.getMessage("Recipe_Lookup_Failed", ChatColor.DARK_RED + "No Recipe Found!"));
						return;
					}
					
				}
			}else{
				matrix = r.getMatrixView();
			}
		}
		final ItemStack[] items = matrix;
		
		/*(for(ItemStack item : items){
			if(item == null){
				System.out.println("AIR");
			}else{
				System.out.println(item.toString());
			}
		}*/
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "itemLookup"));
				p.openWorkbench(null, true);
				for(int i = 0; i < items.length; i++){
					if(items[i] != null){
						p.getOpenInventory().setItem(i+1, items[i].clone());
					}
				}
			
			
	}
	
	
 	
	public void openRecipeBuilder(final Player p, final String type){
		ItemBuilder.close(p);
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , m.getMessage("Recipe_Builder_Insert", ChatColor.DARK_GREEN + "Insert the desired result"));
		
		ProRecipes.getPlugin().getServer().getScheduler().runTaskLater(ProRecipes.getPlugin(), new Runnable(){

			@Override
			public void run() {
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "itemRequest" + type));
				p.openWorkbench(null, true);
				//Inventory i = RPGRecipes.getPlugin().getServer().createInventory(p, InventoryType.WORKBENCH, "ItemBuilder");
				//p.openInventory(i);
			}
			
		}, ProRecipes.getPlugin().wait);
		
	}
	
	private void openShapeless(final Player p) {
		final ItemStack i = p.getOpenInventory().getItem(0).clone();
		ItemBuilder.close(p);
		p.setMetadata("closed", new FixedMetadataValue(ProRecipes.getPlugin(), ""));
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") ,  m.getMessage("Recipe_Builder_Add", ChatColor.DARK_GREEN + "Add your ingredients! Close to save recipe."));
		ProRecipes.getPlugin().getServer().getScheduler().runTaskLater(ProRecipes.getPlugin(), new Runnable(){
			
			@Override
			public void run() {
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "craftRecipeShapeless"));
				p.openWorkbench(null, true);
				//p.removeMetadata("closed", RPGRecipes.getPlugin());
				p.getOpenInventory().setItem(0, i);
				//Inventory i = RPGRecipes.getPlugin().getServer().createInventory(p, InventoryType.WORKBENCH, "ItemBuilder");
				//p.openInventory(i);
			}
			
		}, ProRecipes.getPlugin().wait);
		
	}

	private void openShaped(final Player p) {
		final ItemStack i = p.getOpenInventory().getItem(0).clone();
		
		ItemBuilder.close(p);
		p.setMetadata("closed", new FixedMetadataValue(ProRecipes.getPlugin(), ""));
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") ,  m.getMessage("Recipe_Builder_Add", ChatColor.DARK_GREEN + "Add your ingredients! Close to save recipe."));
		ProRecipes.getPlugin().getServer().getScheduler().runTaskLater(ProRecipes.getPlugin(), new Runnable(){

			@Override
			public void run() {
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "craftRecipeShaped"));
				p.openWorkbench(null, true);
				//p.removeMetadata("closed", RPGRecipes.getPlugin());
				p.getOpenInventory().setItem(0, i);
				//Inventory i = RPGRecipes.getPlugin().getServer().createInventory(p, InventoryType.WORKBENCH, "ItemBuilder");
				//p.openInventory(i);
			}
			
		}, ProRecipes.getPlugin().wait);
		
	}
	
	private void openFurnace(final Player p) {
		
		final ItemStack i = p.getOpenInventory().getItem(0).clone();
		
		ItemBuilder.close(p);
		p.setMetadata("closed", new FixedMetadataValue(ProRecipes.getPlugin(), ""));
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") ,  m.getMessage("Recipe_Builder_Furnace", ChatColor.DARK_GREEN + "Add your source! Close to save recipe."));
		ProRecipes.getPlugin().getServer().getScheduler().runTaskLater(ProRecipes.getPlugin(), new Runnable(){

			@Override
			public void run() {
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "craftRecipeFurnace"));
				p.openWorkbench(null, true);
				p.getOpenInventory().setItem(0, i);
			}
			
		}, ProRecipes.getPlugin().wait);
	}
	
	private void openMutliCraft(final Player p){
		
		ItemBuilder.close(p);
		p.setMetadata("closed", new FixedMetadataValue(ProRecipes.getPlugin(), ""));
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder")  + ": " + m.getMessage("Recipe_Builder_MultiCraft_Title", "Multi-Craft"),  
				m.getMessage("Recipe_Builder_MultiCraft_Add", ChatColor.DARK_GREEN + "Add ingredients on left, results on right"));
		
		ProRecipes.getPlugin().getServer().getScheduler().runTaskLater(ProRecipes.getPlugin(), new Runnable(){

			@Override
			public void run() {
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "craftRecipeChest"));
				p.openInventory(ProRecipes.getPlugin().getRecipes().createMultiTable(p, 0));
				
			}
			
		}, ProRecipes.getPlugin().wait);
	}
	
	public void openChoice(final Player p) {
		
		
		ItemBuilder.close(p);
		p.setMetadata("closed", new FixedMetadataValue(ProRecipes.getPlugin(), ""));
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") ,  m.getMessage("Choose_Type", ChatColor.DARK_GREEN + "Choose the type of recipe"));
		
		ProRecipes.getPlugin().getServer().getScheduler().runTaskLater(ProRecipes.getPlugin(), new Runnable(){

			@Override
			public void run() {
				p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "chooseType"));
				p.openWorkbench(null, true);
				p.removeMetadata("closed", ProRecipes.getPlugin());
				ItemStack addLore = new ItemStack(Material.BRICK);
				ItemMeta m = addLore.getItemMeta();
				
				m.setDisplayName(ChatColor.GOLD + "Shaped");
				addLore.setItemMeta(m);
				
				ItemStack takeLore = new ItemStack(Material.GLOWSTONE_DUST);
				m = takeLore.getItemMeta();
				m.setDisplayName(ChatColor.RED + "Shapeless");
				takeLore.setItemMeta(m);
				
				ItemStack takeLoree = new ItemStack(Material.COAL);
				m = takeLoree.getItemMeta();
				m.setDisplayName(ChatColor.DARK_PURPLE + "Furnace");
				takeLoree.setItemMeta(m);
				
				ItemStack takeLoreee = new ItemStack(MinecraftVersion.getMaterial("WORKBENCH","CRAFTING_TABLE"));
				m = takeLoree.getItemMeta();
				m.setDisplayName(ChatColor.DARK_GREEN + "Multi-Craft");
				takeLoreee.setItemMeta(m);
				
				
				p.getOpenInventory().setItem(4, takeLore);
				p.getOpenInventory().setItem(5, takeLoree);
				p.getOpenInventory().setItem(8, takeLoreee);
				p.getOpenInventory().setItem(6, addLore);
				
			}
			
		}, ProRecipes.getPlugin().wait);
		
	}
	
	public void askPermission(final Player p){
		
		
		ItemBuilder.close(p);
		p.setMetadata("closed", new FixedMetadataValue(ProRecipes.getPlugin(), ""));
		ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , m.getMessage("Choose_Permission", ChatColor.DARK_GREEN + "Type a permission. Type 'no' for no permission"));
		
		p.setMetadata("recipeBuilder", new FixedMetadataValue(ProRecipes.getPlugin(), "choosePermission"));
	
	}
	
	
	
	@EventHandler
	public void onInventoryClick(InventoryClickEvent event){
		if(event.getInventory() == null)return;
		if(!event.getInventory().getType().equals(InventoryType.WORKBENCH))return;
		if(!event.getWhoClicked().hasMetadata("recipeBuilder"))return;
		
		if(((Player)event.getWhoClicked()).isSneaking()){
			event.setCancelled(true);
			return;
		}
		//////////////////////System.out.printlnevent.getAction());
		String step = event.getWhoClicked().getMetadata("recipeBuilder").get(0).asString();
		if(step.contains("itemRequest")){
			if(event.getRawSlot() > 9 || event.getRawSlot() == 0)return;
			String type = step.replace("itemRequest", "");
			switch(event.getAction()){
			case PLACE_ONE:
			case PLACE_SOME:
			case PLACE_ALL:
			case DROP_ALL_CURSOR:
			case DROP_ALL_SLOT:
			case DROP_ONE_CURSOR:
			case DROP_ONE_SLOT:
			case MOVE_TO_OTHER_INVENTORY:	
				event.setCancelled(true);
				ItemStack i = event.getCursor().clone();
				
				event.setCursor(null);
				if(i == null){
					i = event.getCurrentItem().clone();
					event.setCurrentItem(null);
				}
				storedItems.put(event.getWhoClicked().getName(), i);
				event.getInventory().setItem(0, i);
				if(type.equalsIgnoreCase("shapeless")){
					openShapeless((Player)event.getWhoClicked());
				}else if(type.equalsIgnoreCase("shaped")){
					openShaped((Player)event.getWhoClicked());
				}else if(type.equalsIgnoreCase("smelt")){
					openFurnace((Player)event.getWhoClicked());
				}/*else if(type.equalsIgnoreCase("multi")){
					openMutliCraft((Player)event.getWhoClicked());
				}*/
				return;
			case NOTHING:
				openMutliCraft((Player)event.getWhoClicked());
				//This is going to be mutlicraft
				
			}
		}else if(step.equalsIgnoreCase("chooseType")){
			if(event.getSlot() == 4){
				openRecipeBuilder((Player)event.getWhoClicked(), "shapeless");
			}else if(event.getSlot() == 6){
				openRecipeBuilder((Player)event.getWhoClicked(), "shaped");
			}else if(event.getSlot() == 5){
				openRecipeBuilder((Player)event.getWhoClicked(), "smelt");
			}else if(event.getSlot() == 8){
				openMutliCraft((Player)event.getWhoClicked());
			}
			
			event.setCancelled(true);
		}else if(step.contains("craft")){
			if(event.getRawSlot() == 0){
				event.setCancelled(true);
			}
			
			if(step.equalsIgnoreCase("craftRecipeFurnace")){
				switch(event.getAction()){
				case PLACE_ONE:
				case PLACE_SOME:
				case PLACE_ALL:
				case DROP_ALL_CURSOR:
				case DROP_ALL_SLOT:
				case DROP_ONE_CURSOR:
				case DROP_ONE_SLOT:
				case MOVE_TO_OTHER_INVENTORY:
					event.setCancelled(true);
					ItemStack i = event.getCursor().clone();
					
					event.setCursor(null);
					if(i == null){
						i = event.getCurrentItem().clone();
						event.setCurrentItem(null);
					}
				saveFurnace(i, (Player)event.getWhoClicked());
				ItemBuilder.close((Player)event.getWhoClicked());
				}
			}
		}else if(step.equalsIgnoreCase("itemLookup")){
			event.setCancelled(true);
		}
			/*else if(step.equalsIgnoreCase("choosePermission")){
		}
			if(event.getRawSlot() == 0){
				event.setCancelled(true);
			}else if(event.getRawSlot() == 1){
				if(event.getInventory().getItem(2).hasItemMeta()){
					String name = event.getInventory().getItem(2).getItemMeta().getDisplayName();
					event.getWhoClicked().setMetadata("recPermission", new FixedMetadataValue(RPGRecipes.getPlugin(), name));
				}
				event.setCancelled(true);
				openChoice((Player)event.getWhoClicked());
			}
		}*/
		
	}
	
	@EventHandler
	public void onTalk(AsyncPlayerChatEvent event){
		if(event.getPlayer().hasMetadata("recipeBuilder")){
			String step = event.getPlayer().getMetadata("recipeBuilder").get(0).asString();
			if(step.equalsIgnoreCase("choosePermission")){
				if(event.getMessage().equalsIgnoreCase("no")){
					event.setCancelled(true);
					openChoice(event.getPlayer());
					return;
				}
				event.getPlayer().setMetadata("recPermission", new FixedMetadataValue(ProRecipes.getPlugin(), ChatColor.stripColor(event.getMessage())));
				event.setCancelled(true);
				openChoice(event.getPlayer());
			}
		}
	}
	
	

	@EventHandler
	public void inventoryDrag(InventoryDragEvent event){
		if(!event.getInventory().getType().equals(InventoryType.WORKBENCH))return;
		if(!event.getWhoClicked().hasMetadata("recipeBuilder"))return;
		String step = event.getWhoClicked().getMetadata("recipeBuilder").get(0).asString();
		if(step.contains("itemRequest")){
			
				event.setCancelled(true);
				
			}
	}
	
	public static RecipeChest createChest(ItemStack[] result, ItemStack[] ingredients, boolean reg){
		RecipeChest rec = new RecipeChest(result);
		//System.out.println("Ingredients: ");
		//System.out.println(Arrays.deepToString(ingredients));
		Pair<String[][], HashMap<Character, ItemStack>> s = RecipeChest.getStructure
				(RecipeChest.convertToMinimizedStructure(RecipeChest.convertToArray(ingredients)));
		rec.setStructure(s.getA());
		rec.setIngredients(s.getB());
		if(reg){
			rec.register();
		}
		
		return rec;
		
	}
	
	public static RecipeShaped createShaped(ItemStack result, ItemStack[] ingredients, boolean reg){
		RecipeShaped rec = new RecipeShaped(result);
		Pair<String[][], HashMap<Character, ItemStack>> s = RecipeShaped.getStructure
				(RecipeShaped.convertToMinimizedStructure(RecipeShaped.convertToArray(ingredients)));
		//////////////////////System.out.println"In create shaped : ");
		//////////////////////System.out.printlnArrays.deepToString(s.getA()));
		//////////////////////System.out.println(s.getB().toString()));
		rec.setStructure(s.getA());
		rec.setIngredients(s.getB());
		
		
		if(reg){
			rec.register();
		}
		
		return rec;
		//////////////////////System.out.println"result: " + result.getType());
	}
	
	public static RecipeShapeless createShapeless(ItemStack result, ItemStack[] ingredients, boolean reg){
		RecipeShapeless rec = new RecipeShapeless(result);
		for(ItemStack i : ingredients){
			//////////////////////System.out.println"adding " + i);
			rec.addIngredient(i);
		}
		if(reg){
			rec.register();
		}
		return rec;
	}
	
	public void saveFurnace(ItemStack source, Player p){
		p.removeMetadata("recipeBuilder", ProRecipes.getPlugin());
		if(source.getType() != Material.AIR){
			ItemStack ib = null;
			ib = storedItems.get(p.getName()).clone();
			storedItems.remove(p.getName());
			RecipeFurnace rec = new RecipeFurnace(ib, source);
			if(p.hasMetadata("recPermission")){
				rec.setPermission(p.getMetadata("recPermission").get(0).asString());
				p.removeMetadata("recPermission", ProRecipes.getPlugin());
			}
			rec.register();
			ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") ,  m.getMessage("Furnace_Saved", ChatColor.DARK_GREEN + "Your furnace recipe has been saved!"));
			ProRecipes.getPlugin().getRecipes().saveRecipes(false);
		}else{
			ItemBuilder.sendMessage(p, m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") ,  m.getMessage("Recipe_Builder_Empty", ChatColor.DARK_RED + "You cannot save an empty recipe"));
			//return;
		}
	}
	
	@EventHandler
	public void onClose(InventoryCloseEvent event){
		if(event.getPlayer().hasMetadata("recipeBuilder")){
			if(!event.getPlayer().hasMetadata("closed")){
				event.getPlayer().removeMetadata("recipeBuilder", ProRecipes.getPlugin());
				event.getInventory().clear();
				return;
			}
			
			String step = event.getPlayer().getMetadata("recipeBuilder").get(0).asString();
			//System.out.println(step);
			if(step.contains("craftRecipe")){
				ItemStack ib = storedItems.containsKey(event.getPlayer().getName()) ? storedItems.get(event.getPlayer().getName()).clone() : null;
				
				
				ArrayList<ItemStack> arr = new ArrayList<ItemStack>();
				
				for(int i = 1; i < 10; i++){
					//////////////////System.out.printlnevent.getInventory().getItem(i) + " " + i);
					arr.add(event.getInventory().getItem(i));
				}
				
				boolean empty = true;
				for(ItemStack it : arr){
					if(it != null && !it.getType().equals(Material.AIR)){
						empty = false;
					}
				}
				
				if(step.equalsIgnoreCase("craftRecipeShapeless")){
					if(ib.getType().equals(Material.AIR) || ib == null){
						//ib = storedItems.get(event.getPlayer().getName()).clone();
						storedItems.remove(event.getPlayer().getName());
					}
					event.getPlayer().removeMetadata("recipeBuilder", ProRecipes.getPlugin());
					if(empty){
						ItemBuilder.sendMessage((Player)event.getPlayer(), m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , 
								m.getMessage("Recipe_Builder_Empty", ChatColor.DARK_RED + "You cannot save an empty recipe"));
						//event.setCancelled(true);
						return;
					}
					ItemBuilder.sendMessage((Player)event.getPlayer(), m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , 
							 m.getMessage("Shapeless_Saved", ChatColor.DARK_GREEN + "Your shapeless recipe has been saved!"));
					RecipeShapeless c = createShapeless(ib, arr.toArray(new ItemStack[9]), true);
					if(event.getPlayer().hasMetadata("recPermission")){
						String permission = event.getPlayer().getMetadata("recPermission").get(0).asString();
						c.setPermission(permission);
						event.getPlayer().removeMetadata("recPermission", ProRecipes.getPlugin());
					}
					ProRecipes.getPlugin().getRecipes().saveRecipes(false);
				}else if(step.equalsIgnoreCase("craftRecipeShaped")){
					if(ib.getType().equals(Material.AIR) || ib == null){
						ib = storedItems.get(event.getPlayer().getName()).clone();
						storedItems.remove(event.getPlayer().getName());
					}
					event.getPlayer().removeMetadata("recipeBuilder", ProRecipes.getPlugin());
					if(empty){
						ItemBuilder.sendMessage((Player)event.getPlayer(), m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , 
								m.getMessage("Recipe_Builder_Empty", ChatColor.DARK_RED + "You cannot save an empty recipe"));
						return;
					}
					ItemBuilder.sendMessage((Player)event.getPlayer(), m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , 
							 
							m.getMessage("Shaped_Saved", ChatColor.DARK_GREEN + "Your shaped recipe has been saved!"));
					RecipeShaped c = createShaped(ib, arr.toArray(new ItemStack[9]), true);
					if(event.getPlayer().hasMetadata("recPermission")){
						String permission = event.getPlayer().getMetadata("recPermission").get(0).asString();
						c.setPermission(permission);
						event.getPlayer().removeMetadata("recPermission", ProRecipes.getPlugin());
					}
					ProRecipes.getPlugin().getRecipes().saveRecipes(false);
				}else if(step.equalsIgnoreCase("craftRecipeChest")){
					if(!event.getInventory().getName().contains(ProRecipes.getPlugin().ms.getMessage("Multi_Craft_Enter", "Enter Recipe"))){
						return;
					}
					ArrayList<ItemStack> ingredients = new ArrayList<ItemStack>();
					ArrayList<ItemStack> results = new ArrayList<ItemStack>();
					for(int i = 9; i < 45; i++){
						
							if((i-1) % 9 == 0 || (i-2) % 9 == 0 || (i-3) % 9 == 0 || (i-4) % 9 == 0){
								ingredients.add(event.getInventory().getItem(i));
								if(event.getInventory().getItem(i) != null){
									//System.out.println(event.getInventory().getItem(i));
								}else{
									//System.out.println("null");
								}
							}else if((i-7) % 9 == 0){
								results.add(event.getInventory().getItem(i));
							}
						
						
					}
					
					
					boolean emptyIngredients = true;
					for(ItemStack i : ingredients){
						if(i != null){
							emptyIngredients = false;
							break;
							
						}
					}
					
					event.getPlayer().removeMetadata("recipeBuilder", ProRecipes.getPlugin());
					
					if(emptyIngredients){
						ItemBuilder.sendMessage((Player)event.getPlayer(), m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , m.getMessage("Recipe_Builder_Empty", ChatColor.DARK_RED + "You cannot save an empty recipe"));
						//createChest(results.toArray(new ItemStack[4]), ingredients.toArray(new ItemStack[16]));
					}else{
						ItemBuilder.sendMessage((Player)event.getPlayer(), m.getMessage("Recipe_Builder_Title", ChatColor.GOLD + "Recipe Builder") , 
								 m.getMessage("Multi-Craft_Saved", ChatColor.DARK_GREEN + "Your multi-craft recipe has been saved!"));
						RecipeChest c = createChest(results.toArray(new ItemStack[4]), ingredients.toArray(new ItemStack[16]), true);
						if(event.getPlayer().hasMetadata("recPermission")){
							String permission = event.getPlayer().getMetadata("recPermission").get(0).asString();
							c.setPermission(permission);
							event.getPlayer().removeMetadata("recPermission", ProRecipes.getPlugin());
						}
						ProRecipes.getPlugin().getRecipes().saveRecipes(false);
					}
					
				}else if(step.equalsIgnoreCase("itemLookup")){
					event.getPlayer().removeMetadata("recipeBuilder", ProRecipes.getPlugin());
				}
			}
			
			if(step.equalsIgnoreCase("chooseType") || step.contains("craftRecipe")){
				event.getInventory().clear();
				//close((Player)event.getPlayer());
			}
		}
	}

	

	

}