package com.pqbyte.coherence;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.ScreenAdapter;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;

public class WinnerScreen extends ScreenAdapter {

  private Stage stage;
  private Coherence game;

  public WinnerScreen(Coherence game) {
    this.game = game;
    Skin skin = new Skin(Gdx.files.internal("skin/uiskin.json"));
    Button restartButton = createRestartButton(skin);
    Button exitButton = createExitButton(skin);
    Label titleLabel = createTitleLabel(skin);

    stage = new Stage();
    stage.addActor(restartButton);
    stage.addActor(exitButton);
    stage.addActor(titleLabel);

    Gdx.input.setInputProcessor(stage);
  }

  @Override
  public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.draw();
  }

  @Override
  public void dispose() {
    stage.dispose();
  }

  private Label createTitleLabel(Skin skin) {
    Label label = new Label("GAME IS OVER", skin);

    // Double font size
    label.setSize(label.getWidth() * 2, label.getHeight());
    label.setFontScale(2);

    int width = Gdx.graphics.getWidth();
    int height = Gdx.graphics.getHeight();

    label.setPosition(
        (width - label.getWidth()) / 2,
        (height - label.getHeight()) / 2 + height / 4
    );

    return label;
  }

  private Button createRestartButton(Skin skin) {
    TextButton button = new TextButton("RESTART GAME", skin, "default");
    int buttonWidth = 300;
    int buttonHeight = 60;
    button.setWidth(buttonWidth);
    button.setHeight(buttonHeight);

    int width = Gdx.graphics.getWidth();
    int height = Gdx.graphics.getHeight();

    button.setPosition(
        (width - buttonWidth) / 2,
        (height - buttonHeight) / 2 - height / 4
    );

    button.addListener(new ClickListener() {
      @Override
      public void clicked(InputEvent event, float xPos, float yPos) {
        game.setScreen(new GameScreen(game));
        dispose();
      }
    });
    return button;
  }
  private Button createExitButton(Skin skin) {
    TextButton button = new TextButton("EXIT THE GAME", skin, "default");
    int buttonWidth = 300;
    int buttonHeight = 60;
    button.setWidth(buttonWidth);
    button.setHeight(buttonHeight);

    int width = Gdx.graphics.getWidth();
    int height = Gdx.graphics.getHeight();

    button.setPosition(
        (width - buttonWidth) / 2,
        (height - buttonHeight) / 2 - height / 3
    );

    button.addListener(new ClickListener() {
      @Override
      public void clicked(InputEvent event, float xPos, float yPos) {
        Gdx.app.exit();
        dispose();
      }
    });
    return button;
  }
}

@@ -1076,24 +1076,72 @@
 tton(skin);%0A
+    Button menuButton = createMenuButton(skin);%0A
     Label ti
@@ -1260,32 +1260,64 @@
 or(exitButton);%0A
+    stage.addActor(menuButton);%0A
     stage.addAct
@@ -3383,11 +3383,700 @@
 ton;%0A  %7D
+%0A%0A  private Button createMenuButton(Skin skin) %7B%0A    TextButton button = new TextButton(%22RETURN TO MAIN MENU%22, skin, %22default%22);%0A    int buttonWidth = 300;%0A    int buttonHeight = 60;%0A    button.setWidth(buttonWidth);%0A    button.setHeight(buttonHeight);%0A%0A    int width = Gdx.graphics.getWidth();%0A    int height = Gdx.graphics.getHeight();%0A%0A    button.setPosition(%0A        (width - buttonWidth) / 2,%0A        (height - buttonHeight) / 2 - height / 6%0A    );%0A%0A    button.addListener(new ClickListener() %7B%0A      @Override%0A      public void clicked(InputEvent event, float xPos, float yPos) %7B%0A        game.setScreen(new MenuScreen(game));%0A        dispose();%0A      %7D%0A    %7D);%0A    return button;%0A  %7D
 %0A%7D%0A

Add menu button to WinnerScreen