package visualiser.Controllers;

import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.stage.Modality;
import mock.exceptions.EventConstructionException;
import visualiser.app.App;

import java.io.IOException;

/**
 * Controller for the opening title window.
 * Has two initial buttons for a user to decide how to play their game. Has a
 * burger-boat and comic sans styling to allure and entice users into playing
 * the game.
 */
public class TitleController extends Controller {
    private @FXML RadioButton dayModeRD;
    private @FXML RadioButton nightModeRD;
    private @FXML Label tutorialLabel;
    private @FXML Pane menuPane;
    private @FXML ImageView imgSun;

    /**
     * Method called when the 'host a game' button is pressed.
     * Opens the next window allowing a user to host their own game.
     * Currently used to run the RaceVision mock.
     * @throws IOException if main has problems
     */
    public void hostAGame() throws IOException {
        loadScene("hostGame.fxml");
    }

    /**
     * To be implemented at a later date- will open the next scene displaying
     * games a player can join. Place holder method for now!
     * @throws IOException socket error
     */
    public void joinAGame() throws IOException {
        loadScene("lobby.fxml");
    }

    /**
     * Switches the css of the program to day mode theme
     */
    public void setDayMode(){
        dayModeRD.getScene().getStylesheets().clear();
        menuPane.getStylesheets().clear();
        imgSun.setImage(new Image(getClass().getResource("/visualiser/images/sun.png").toExternalForm()));
        dayModeRD.getScene().getStylesheets().add("/css/dayMode.css");
        menuPane.setStyle("-fx-background-color:  #6be6ff;");
        nightModeRD.setSelected(false);
        App.dayMode = true;
    }

    /**
     * Switches the css of the program to night mode theme
     */
    public void setNightMode(){
        nightModeRD.getScene().getStylesheets().clear();
        menuPane.getStylesheets().clear();
        imgSun.setImage(new Image(getClass().getResource("/visualiser/images/sunsleep.png").toExternalForm()));
        nightModeRD.getScene().getStylesheets().add("/css/nightMode.css");
        menuPane.setStyle("-fx-background-color: #1f2c60;");
        dayModeRD.setSelected(false);
        App.dayMode = false;
    }

    /**
     * Called when control button is pressed. New pop up window displaying controls
     */
    public void showControls(){
        try {
            loadPopupScene("keyBindings.fxml",
                    "Game Controls", Modality.WINDOW_MODAL);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void tutorialStartPressed() throws IOException,
            EventConstructionException {
        App.gameType = 4;
        HostGameController hgc = new HostGameController();
        hgc.setCurrentMapIndex(4);
        hgc.hostGamePressed();
    }

}