package codechicken.nei.config;

import codechicken.lib.vec.Rectangle4i;
import codechicken.nei.TextField;
import codechicken.nei.config.GuiOptionList.OptionScrollSlot;

import java.util.List;

import static codechicken.lib.gui.GuiDraw.drawString;
import static codechicken.lib.gui.GuiDraw.getStringWidth;

public class OptionTextField extends Option
{
    private boolean focused = false;
    private TextField textField = new TextField("")
    {
        @Override
        public boolean isValid(String string) {
            return super.isValid(string) && isValidInput(string);
        }

        @Override
        public void onTextChange(String oldText) {
            if(focused() && isValidValue(text()))
                if(!defaulting() || !text().equals(getTag().getValue()))//don't override global if text hasn't changed
                    getTag().setValue(text());
        }

        @Override
        public boolean focused() {
            return focused;
        }

        @Override
        public void setFocus(boolean focus) {
            if (!focus && !isValidValue(text()))
                setText(renderTag().getValue());

            focused = focus;
        }
    };

    public OptionTextField(String name) {
        super(name);
        textField.h = 20;
    }

    @Override
    public void onAdded(OptionScrollSlot slot) {
        super.onAdded(slot);
    }

    @Override
    public void update() {
        textField.update();
        if(!textField.focused())
            textField.setText(renderTag().getValue());
    }

    public String getPrefix() {
        return translateN(name);
    }

    @Override
    public void draw(int mousex, int mousey, float frame) {
        drawString(getPrefix(), 10, 6, -1);

        textField.w = slot.slotWidth() - getStringWidth(getPrefix()) - 16;
        textField.x = slot.slotWidth() - textField.w;
        textField.draw(mousex, mousey);
    }

    @Override
    public void keyTyped(char c, int keycode) {
        textField.handleKeyPress(keycode, c);
    }

    @Override
    public void mouseClicked(int mousex, int mousey, int button) {
        if (textField.contains(mousex, mousey))
            textField.handleClick(mousex, mousey, button);
    }

    @Override
    public void onMouseClicked(int mousex, int mousey, int button) {
        textField.onGuiClick(mousex, mousey);
    }

    @Override
    public List<String> handleTooltip(int mousex, int mousey, List<String> currenttip) {
        if (new Rectangle4i(10, 0, textField.x - 10, 20).contains(mousex, mousey)) {
            String tip = translateN(name + ".tip");
            if (!tip.equals(name + ".tip"))
                currenttip.add(tip);
        }
        return currenttip;
    }

    public boolean isValidInput(String s) {
        return true;
    }

    public boolean isValidValue(String s) {
        return true;
    }
}