package pp.monopoly.client;

import com.jme3.asset.TextureKey;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Quad;
import com.jme3.texture.Texture;
import com.simsilica.lemur.Button;
import com.simsilica.lemur.Insets3f;
import com.simsilica.lemur.Label;
import com.simsilica.lemur.Panel;
import com.simsilica.lemur.style.ElementId;
import com.simsilica.lemur.component.QuadBackgroundComponent;
import com.jme3.math.ColorRGBA;
import pp.dialog.Dialog;
import pp.monopoly.client.gui.GameMenu;
import pp.dialog.DialogManager;

import java.util.prefs.Preferences;

import static pp.monopoly.Resources.lookup;
import static pp.util.PreferencesUtils.getPreferences;

public class StartMenu extends Dialog {
    private static final Preferences PREFERENCES = getPreferences(StartMenu.class);
    private final MonopolyApp app;

    // Buttons for the menu
    private final Button playButton = new Button(lookup("button.play"));
    private final Button quitButton = new Button(lookup("menu.quit"));
    private final Button settingsButton = new Button("Einstellungen", new ElementId("menu-button"));

    /**
     * Constructs the StartMenu dialog for the Monopoly application.
     *
     * @param app the MonopolyApp instance
     */
    public StartMenu(MonopolyApp app) {
        super(app.getDialogManager());
        this.app = app;

        // Load and display the background image
        TextureKey backgroundKey = new TextureKey("unibw-bib", false);
        Texture backgroundTexture = app.getAssetManager().loadTexture(backgroundKey);
        Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
        backgroundMaterial.setTexture("ColorMap", backgroundTexture);

        // Create a large Quad for the background
        Quad backgroundQuad = new Quad(16, 9); // Adjust size as necessary to fill the screen
        Geometry background = new Geometry("Background", backgroundQuad);
        background.setMaterial(backgroundMaterial);
        background.setLocalTranslation(new Vector3f(-8, -4.5f, -1)); // Position it behind the UI components

        // Attach the background as the first element
        app.getGuiNode().attachChild(background);

        // Load and display the Monopoly logo
        TextureKey monopolyLogoKey = new TextureKey("log-Monopoly", false);
        Texture monopolyLogoTexture = app.getAssetManager().loadTexture(monopolyLogoKey);
        Material monopolyLogoMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
        monopolyLogoMaterial.setTexture("ColorMap", monopolyLogoTexture);

        Quad monopolyQuad = new Quad(5, 1.5f); // Adjust dimensions as necessary
        Geometry monopolyLogo = new Geometry("MonopolyLogo", monopolyQuad);
        monopolyLogo.setMaterial(monopolyLogoMaterial);
        monopolyLogo.setLocalTranslation(new Vector3f(0, 5, 0)); // Position Monopoly logo at the top

        Panel monopolyLogoPanel = new Panel();
        addChild(monopolyLogoPanel);

        // Load and display the university logo
        TextureKey universityLogoKey = new TextureKey("unibw-logo.png", false);
        Texture universityLogoTexture = app.getAssetManager().loadTexture(universityLogoKey);
        Material universityLogoMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
        universityLogoMaterial.setTexture("ColorMap", universityLogoTexture);

        Quad universityQuad = new Quad(4, 1); // Adjust dimensions to fit below Monopoly logo
        Geometry universityLogo = new Geometry("UniversityLogo", universityQuad);
        universityLogo.setMaterial(universityLogoMaterial);
        universityLogo.setLocalTranslation(new Vector3f(0, 3, 0)); // Position below the Monopoly logo

        Panel universityLogoPanel = new Panel();
        addChild(universityLogoPanel);



        // Button actions
        playButton.addClickCommands(source -> startGame());
        quitButton.addClickCommands(source -> app.closeApp());
        settingsButton.addClickCommands(source -> openSettings());

        addChild(monopolyLogoPanel);
        addChild(universityLogoPanel);
        addChild(playButton);
        addChild(quitButton);
        addChild(settingsButton);
    }

    private void startGame() {
        System.out.println("Starting game...");
    }

    private void openSettings() {
        app.getDialogManager().close(this);
        app.getDialogManager().open(new GameMenu(app));
    }

    @Override
    public void update() {
    }

    @Override
    public void escape() {
        close();
    }
}
