package me.rigamortis.seppuku.impl.module.misc;

import me.rigamortis.seppuku.api.event.EventStageable;
import me.rigamortis.seppuku.api.event.network.EventReceivePacket;
import me.rigamortis.seppuku.api.module.Module;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiCrafting;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.init.Items;
import net.minecraft.inventory.ClickType;
import net.minecraft.network.play.server.SPacketSetSlot;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener;

/**
 * Shift clicks the crafting result into the inventory.
 *
 * @author Old Chum
 * @since 10/18/20
 */
public final class QuickCraftModule extends Module {
    public QuickCraftModule () {
        super("QuickCraft", new String[]{"FastCraft", "qcraft"}, "Automatically collects the result when crafting.", "NONE", -1, Module.ModuleType.MISC);
    }

    @Listener
    public void onReceivePacket (EventReceivePacket event) {
        if (event.getStage() == EventStageable.EventStage.PRE) {
            if (event.getPacket() instanceof SPacketSetSlot) {
                // Check if this packet updates the recipe result and if the result is not empty
                if (((SPacketSetSlot) event.getPacket()).getSlot() == 0 && ((SPacketSetSlot) event.getPacket()).getStack().getItem() != Items.AIR) {
                    Minecraft mc = Minecraft.getMinecraft();

                    if (mc.currentScreen instanceof GuiInventory || mc.currentScreen instanceof GuiCrafting) {
                        mc.playerController.windowClick(mc.player.openContainer.windowId, 0, 0, ClickType.QUICK_MOVE, mc.player);
                        mc.playerController.updateController();
                    }
                }
            }
        }
    }
}