package com.teamwizardry.wizardry.crafting.burnable;

import com.teamwizardry.librarianlib.core.LibrarianLib;
import com.teamwizardry.wizardry.Wizardry;
import net.minecraft.item.crafting.Ingredient;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import static com.teamwizardry.wizardry.crafting.mana.ManaRecipes.getResourceListing;

public class FireRecipes {
	public static final FireRecipes INSTANCE = new FireRecipes();

	public static final HashMap<Ingredient, FireRecipe> RECIPES = new HashMap<>();

	public void loadRecipes(File directory) {
		FireRecipeLoader.INSTANCE.setDirectory(directory);
		FireRecipeLoader.INSTANCE.processRecipes(RECIPES);
	}

	public void copyMissingRecipes(File directory) {
		for (String recipeName : getResourceListing(Wizardry.MODID, "fire_recipes")) {
			if (recipeName.isEmpty()) continue;

			File file = new File(directory, recipeName);
			if (file.exists()) continue;

			InputStream stream = LibrarianLib.PROXY.getResource(Wizardry.MODID, "fire_recipes/" + recipeName);
			if (stream == null) {
				Wizardry.LOGGER.fatal("    > SOMETHING WENT WRONG! Could not read recipe " + recipeName + " from mod jar! Report this to the devs on Github!");
				continue;
			}

			try {
				FileUtils.copyInputStreamToFile(stream, file);
				Wizardry.LOGGER.info("    > Fire recipe " + recipeName + " copied successfully from mod jar.");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void copyAllRecipes(File directory)
	{
		Map<String, ModContainer> modList = Loader.instance().getIndexedModList();
		for (Map.Entry<String, ModContainer> entry : modList.entrySet() ) {
			for (String recipeName : getResourceListing(entry.getKey(), "fire_recipes")) {
				if (recipeName.isEmpty()) continue;
	
				InputStream stream = LibrarianLib.PROXY.getResource(entry.getKey(), "fire_recipes/" + recipeName);
				if (stream == null) {
					Wizardry.LOGGER.fatal("    > SOMETHING WENT WRONG! Could not read recipe " + recipeName + " from mod jar of '" + entry.getKey() + "'! Report this to the devs on Github!");
					continue;
				}
				
				try {
					FileUtils.copyInputStreamToFile(stream, new File(directory, recipeName));
					Wizardry.LOGGER.info("    > Fire recipe " + recipeName + " copied successfully from mod jar.");
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}