/*
 * Copyright (C) 2017 - 2019 | Wurst-Imperium | All rights reserved.
 *
 * This source code is subject to the terms of the GNU General Public
 * License, version 3. If a copy of the GPL was not distributed with this
 * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
 */
package net.wurstclient.forge.clickgui;

import java.io.IOException;

import org.lwjgl.input.Keyboard;

import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.wurstclient.forge.compatibility.WMinecraft;
import net.wurstclient.forge.settings.SliderSetting;
import net.wurstclient.forge.settings.SliderSetting.ValueDisplay;
import net.wurstclient.forge.utils.MathUtils;

public final class EditSliderScreen extends GuiScreen
{
	private final GuiScreen prevScreen;
	private final SliderSetting slider;
	
	private GuiTextField valueField;
	private GuiButton doneButton;
	
	public EditSliderScreen(GuiScreen prevScreen, SliderSetting slider)
	{
		this.prevScreen = prevScreen;
		this.slider = slider;
	}
	
	@Override
	public boolean doesGuiPauseGame()
	{
		return false;
	}
	
	@Override
	public void initGui()
	{
		valueField = new GuiTextField(1, WMinecraft.getFontRenderer(),
			width / 2 - 100, 60, 200, 20);
		valueField
			.setText(ValueDisplay.DECIMAL.getValueString(slider.getValue()));
		valueField.setSelectionPos(0);
		valueField.setFocused(true);
		
		buttonList.add(doneButton =
			new GuiButton(0, width / 2 - 100, height / 3 * 2, "Done"));
	}
	
	@Override
	protected void actionPerformed(GuiButton button) throws IOException
	{
		String value = valueField.getText();
		if(MathUtils.isDouble(value))
			slider.setValue(Double.parseDouble(value));
		mc.displayGuiScreen(prevScreen);
	}
	
	@Override
	protected void mouseClicked(int mouseX, int mouseY, int mouseButton)
		throws IOException
	{
		super.mouseClicked(mouseX, mouseY, mouseButton);
		valueField.mouseClicked(mouseX, mouseY, mouseButton);
	}
	
	@Override
	protected void keyTyped(char typedChar, int keyCode) throws IOException
	{
		valueField.textboxKeyTyped(typedChar, keyCode);
		
		if(keyCode == Keyboard.KEY_RETURN)
			actionPerformed(doneButton);
		else if(keyCode == Keyboard.KEY_ESCAPE)
			mc.displayGuiScreen(prevScreen);
	}
	
	@Override
	public void updateScreen()
	{
		valueField.updateCursorCounter();
	}
	
	@Override
	public void drawScreen(int mouseX, int mouseY, float partialTicks)
	{
		drawDefaultBackground();
		drawCenteredString(WMinecraft.getFontRenderer(), slider.getName(),
			width / 2, 20, 0xffffff);
		valueField.drawTextBox();
		super.drawScreen(mouseX, mouseY, partialTicks);
	}
}