package fi.dy.masa.enderutilities.gui.client;

import java.io.IOException;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
import fi.dy.masa.enderutilities.gui.client.base.GuiEnderUtilities;
import fi.dy.masa.enderutilities.gui.client.button.GuiButtonStateCallback;
import fi.dy.masa.enderutilities.gui.client.button.GuiButtonStateCallback.ButtonState;
import fi.dy.masa.enderutilities.gui.client.button.IButtonStateCallback;
import fi.dy.masa.enderutilities.inventory.container.ContainerMemoryChest;
import fi.dy.masa.enderutilities.network.PacketHandler;
import fi.dy.masa.enderutilities.network.message.MessageGuiAction;
import fi.dy.masa.enderutilities.reference.ReferenceGuiIds;
import fi.dy.masa.enderutilities.tileentity.TileEntityMemoryChest;

public class GuiMemoryChest extends GuiEnderUtilities implements IButtonStateCallback
{
    public static final int BTN_ID_TOGGLE_LOCK = 1;

    private final TileEntityMemoryChest temc;
    private final int chestTier;

    public GuiMemoryChest(ContainerMemoryChest container, TileEntityMemoryChest te)
    {
        super(container, 176, 176, "gui.container." + te.getTEName() + "." + (te.getStorageTier() < 3 ? te.getStorageTier() : 0));

        this.infoArea = new InfoArea(160, 5, 11, 11, "enderutilities.gui.infoarea." + te.getTEName());
        this.temc = te;
        this.chestTier = te.getStorageTier();
    }

    @Override
    public void initGui()
    {
        this.setGuiYSize();

        super.initGui();
        this.createButtons();
    }

    protected void setGuiYSize()
    {
        switch(this.chestTier)
        {
            case 0: this.ySize = 140; break;
            case 1: this.ySize = 176; break;
            case 2: this.ySize = 234; break;
            default:
        }
    }

    @Override
    protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY)
    {
        int y = 47;

        switch(this.chestTier)
        {
            case 0: y =  47; break;
            case 1: y =  83; break;
            case 2: y = 137; break;
            default:
        }

        String str = this.temc.hasCustomName() ? this.temc.getName() : I18n.format(this.temc.getName());
        this.fontRenderer.drawString(str, 8, 15, 0x404040);
        this.fontRenderer.drawString(I18n.format("container.inventory"), 8, y, 0x404025);
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float gameTicks, int mouseX, int mouseY)
    {
        super.drawGuiContainerBackgroundLayer(gameTicks, mouseX, mouseY);

        this.drawLockedSlotBackgrounds(this.temc.getInventory());
        this.drawTemplateStacks(this.temc.getInventory());
    }

    protected void createButtons()
    {
        this.buttonList.clear();

        int x = (this.width - this.xSize) / 2;
        int y = (this.height - this.ySize) / 2;

        String strPublic = I18n.format("enderutilities.gui.label.public") + " (" +
                I18n.format("enderutilities.tooltip.item.owner") + ": " + this.temc.getOwnerName() + ")";
        String strPrivate = I18n.format("enderutilities.gui.label.private") + " (" +
                I18n.format("enderutilities.tooltip.item.owner") + ": " + this.temc.getOwnerName() + ")";

        this.buttonList.add(new GuiButtonStateCallback(BTN_ID_TOGGLE_LOCK, x + 138, y + 15, 8, 8, 8, 0, this.guiTextureWidgets, this,
                ButtonState.create(0, 0, strPublic),
                ButtonState.create(0, 48, strPrivate)));
    }

    @Override
    protected void actionPerformed(GuiButton button) throws IOException
    {
        if (button.id == BTN_ID_TOGGLE_LOCK)
        {
            PacketHandler.INSTANCE.sendToServer(new MessageGuiAction(this.temc.getWorld().provider.getDimension(), this.temc.getPos(),
                ReferenceGuiIds.GUI_ID_TILE_ENTITY_GENERIC, TileEntityMemoryChest.GUI_ACTION_TOGGLE_LOCKED, 0));
        }
    }

    @Override
    public int getButtonStateIndex(int callbackId)
    {
        // Locked mode
        if (callbackId == BTN_ID_TOGGLE_LOCK)
        {
            return this.temc.isPublic() ? 0 : 1;
        }

        return 0;
    }

    @Override
    public boolean isButtonEnabled(int callbackId)
    {
        return true;
    }
}