package electrosphere.renderer.ui;

import electrosphere.controls.ControlHandler;
import electrosphere.engine.Globals;
import electrosphere.renderer.ui.elements.Button;
import electrosphere.renderer.ui.elements.Label;
import electrosphere.renderer.ui.elements.Window;
import electrosphere.renderer.ui.elementtypes.ClickableElement;
import electrosphere.renderer.ui.elementtypes.DrawableElement;

/**
 * Utilities for creating widgets within the ui framework
 */
public class WidgetUtils {
    
    
    // public static TextBox createTextBox(int positionX, int positionY, int width, int height, int cols, int rows, String text, boolean render){
    //     TextBox rVal = new TextBox(-width/2, positionY, width, height, rows, cols, text, render, false);
    //     // Globals.widgetManager.registerWidget(rVal);
    //     return rVal;
    // }
    
    // public static TextBox createVerticallyAlignedTextBox(int width, int height, int windowTop, int cols, int rows, String text, boolean render){
    //     TextBox rVal = new TextBox(-width/2, windowTop, width, height, rows, cols, text, render, false);
    //     // Globals.widgetManager.registerWidget(rVal);
    //     return rVal;
    // }
    
    // public static TextBox createVerticallyAlignedMinSizeTextBox(int charWidth, int charHeight, int windowTop, int cols, int rows, String text, boolean render){
    //     TextBox rVal = new TextBox(-cols * charWidth / 2, windowTop, cols * charWidth, rows * charHeight, rows, cols, text, render, false);
    //     // Globals.widgetManager.registerWidget(rVal);
    //     return rVal;
    // }
    
    // public static TextBox createVerticallyAlignedMinSizeTextBoxFromCharCount(int charWidth, int charHeight, int windowTop, String text, boolean render){
    //     int cols = text.length();
    //     int rows = 1;
    //     TextBox rVal = new TextBox(-cols * charWidth / 2, windowTop, cols * charWidth, rows * charHeight, rows, cols, text, render, false);
    //     rVal.setVisible(true);
    //     // Globals.widgetManager.registerWidget(rVal);
    //     return rVal;
    // }
    
    
    
    
    // public static TextBox createVerticallyAlignedEditableTextBox(int width, int height, int windowTop, int cols, int rows, String text, boolean render){
    //     TextBox rVal = new TextBox(-(int)(width/2.5), windowTop, width, height, rows, cols, text, render, true);
    //     rVal.setVisible(true);
    //     // Globals.widgetManager.registerWidget(rVal);
    //     return rVal;
    // }
    
    // public static LayoutSchemeListScrollable createListTEST(){
    //     LayoutSchemeListScrollable rVal = new LayoutSchemeListScrollable(200, 200, 500, 500, true);
    //     rVal.addWidget(createVerticallyAlignedMinSizeTextBoxFromCharCount(25, 25, 0, "TESTESTESTEST", true));
    //     rVal.addWidget(WidgetUtils.createTextBox(100, 100, 500, 500, 3, 10, "TEST", true));
    //     // Globals.widgetManager.registerWidget(rVal);
    //     return rVal;
    // }
    
//     public static DrawableElement createWindowTEST(){
//         Window rVal = new Window(0, 0, 1920, 1080);
// //        //panel 1
// //        ImagePanel imagePanel = new ImagePanel();
// //        imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.testingTexture));
// //        imagePanel.setPositionX(100);
// //        imagePanel.setPositionY(100);
// //        imagePanel.setVisible(true);
// //        rVal.addWidget(imagePanel);
// //        //panel 2
// //        imagePanel = new ImagePanel();
// //        imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.testingTexture));
// //        imagePanel.setVisible(true);
// //        rVal.addWidget(imagePanel);
// //        rVal.setVisible(true);
// //        //window top
// //        imagePanel = new ImagePanel();
// //        imagePanel.setTexture(Globals.assetManager.fetchTexture("Textures/ui/WindowBorder.png"));
// //        imagePanel.setWidth(100);
// //        imagePanel.setHeight(50);
// //        imagePanel.setPositionX(200);
// //        imagePanel.setPositionY(50);
// //        imagePanel.setVisible(true);
// //        rVal.addWidget(imagePanel);
// //        TextInput textInput = new TextInput();
// //        textInput.setText("TESTESTE$STESTET\nTESTESTE$STESTET\nTESTESTE$STESTET\nTESTESTE$STESTET\nTESTESTE$STESTET\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\nAAAAAAAAAABBBBBBBBBB\n");
// //        textInput.setPositionX(0);
// //        textInput.setPositionY(0);
// //        textInput.setWidth(500);
// //        textInput.setHeight(500);
// //        textInput.setFontWidth(10);
// //        textInput.setFontHeight(27);
// //        textInput.setVisible(true);
// //        rVal.addWidget(textInput);
        
        
// //        BitmapCharacter characterDisp = new BitmapCharacter(0,0,500,500,'A');
// //        rVal.addWidget(characterDisp);
        
//         Label label = new Label(100,100,1);
//         label.setText("TESTING");
//         rVal.addChild(label);
        
// //        TextInput textInput2 = new TextInput();
// //        textInput2.setText("TESTESTE$STESTET\nTESTESTE$STESTET\nTESTESTE$STESTET\nTESTESTE$STESTET\nTESTESTE$STESTET\n");
// //        textInput2.setPositionX(500);
// //        textInput2.setPositionY(0);
// //        textInput2.setWidth(500);
// //        textInput2.setHeight(500);
// //        textInput2.setFontWidth(20);
// //        textInput2.setFontHeight(40);
// //        textInput2.setVisible(true);
// //        rVal.addWidget(textInput2);
        
//         rVal.setVisible(true);
//         // Globals.widgetManager.registerWidget(rVal);
//         return rVal;
//     }
    
    public static DrawableElement createInGameMainMenuButton(){
        int width = (int)(Globals.WINDOW_WIDTH * 0.05);
        int height = (int)(Globals.WINDOW_HEIGHT * 0.05);
        int x = Globals.WINDOW_WIDTH - width;
        int y = Globals.WINDOW_HEIGHT - height;
//        Window rVal = new Window(x, 10, 100, 20);
        Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),x,y,width,height,true);
//        Window rVal = new Window(100,100,100,100);
//        System.out.println(x + " " + y + " " + width + " " + height);
//        LayoutSchemeListScrollable rVal = new LayoutSchemeListScrollable(x, y, width, height, true);
////        rVal.addWidget(createVerticallyAlignedMinSizeTextBoxFromCharCount(25, 25, 0, "TESTESTESTEST", true));
//        rVal.addWidget(WidgetUtils.createTextBox(0, 0, width, height, 1, 4, "MENU", true));
//        Widget rVal = WidgetUtils.createTextBox(x, y, width, height, 4, 1, "MENU", true);

        //the actual "menu" label
        Label menuLabel = new Label(0.3f);
        menuLabel.setText("Menu");
        menuLabel.setVisible(true);
        rVal.addChild(menuLabel);
        
        //label telling player what key they have their menu bound to
        Label keyCodeLabel = new Label(0.3f);
        keyCodeLabel.setText(ControlHandler.convertKeycodeToName(Globals.controlHandler.getControl(ControlHandler.DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).getKeyValue()));
        keyCodeLabel.setVisible(true);
        rVal.addChild(keyCodeLabel);
        
        rVal.setVisible(false);
//        Globals.inGameUI.add(rVal);
        // Globals.widgetManager.registerWidget(rVal);
        return rVal;
    }

    public static Button createLabelButton(String label, int posX, int posY, float fontSize, ClickableElement.ClickEventCallback callback){
        Button rVal = new Button();
        Label buttonLabel = new Label(fontSize);
        rVal.setPositionX(posX);
        rVal.setPositionY(posY);
        buttonLabel.setText(label);
        rVal.addChild(buttonLabel);
        rVal.setOnClick(callback);
        return rVal;
    }
    
    
}
