package de.subway_surfers.vpr_app;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Control;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

import java.io.IOException;

public class VerwaltungApplication extends Application {

	private static Stage stage;

	public static void abmelden(){
		VerwaltungApplication.sceneWechseln("login-view.fxml");
	}

	@Override
	public void start(Stage stage) throws IOException {
		FXMLLoader fxmlLoader = new FXMLLoader(VerwaltungApplication.class.getResource("login-view.fxml"));
		Scene scene = new Scene(fxmlLoader.load());

		stage.setWidth(960);
		stage.setHeight(540);

		stage.setMinWidth(960);
		stage.setMinHeight(540);

		//stage.setTitle("Hello!");
		stage.setScene(scene);
		stage.show();

		VerwaltungApplication.stage = stage;
	}

	public static Stage getStage() {
		return stage;
	}
	public static void setStage(Stage stage) {
		VerwaltungApplication.stage = stage;
	}

	/**
	 * Die Scene auf der aktuellen Stage wird durch die in der fxml-Datei definierte Scene ausgetauscht.
	 *
	 * Geschrieben: Sven Alteköster
	 *
	 * @param fxml name der zu ladenden fxml Datei.
	 */
	public static void sceneWechseln(String fxml) {
		FXMLLoader fxmlLoader = new FXMLLoader(VerwaltungApplication.class.getResource(fxml));

		Stage akt = VerwaltungApplication.getStage();

		double breite = akt.getWidth();
		double hoehe = akt.getHeight();

		//neue Scene wird auf die Stage gesetzt
		try {
			Scene scene = new Scene(fxmlLoader.load());
			akt.setScene(scene);

			akt.show();

			akt.setWidth(breite);
			akt.setHeight(hoehe);
		}
		//wird die angegebene fxml Datei nicht gefunden, wird ein Alertfenster geöffnet
		catch (IOException e) {
			Alert alert = new Alert(Alert.AlertType.ERROR);
			alert.setContentText("Beim Laden der Maske ist ein Fehler aufgetreten");
			alert.showAndWait();

			e.printStackTrace();
		}

	}

	/**
	 * in einem neuen Fenster wird die in der fxml-Datei definierte Scene gesetzt.
	 * Die geladene Scene wird <b><u>nicht</u></b> zu der neuen Hauptstage.
	 * Geschrieben: Sven Alteköster
	 *
	 * @param neue Stage auf der die Scene gesetzt werden soll
	 * @param width breite des neuen Fensters
	 * @param height höhe des neuen Fensters
	 * @param fxml name der fxml Datei
	 */
	public static void sceneWechseln(Stage neue, int width, int height, String fxml) {
		FXMLLoader fxmlLoader = new FXMLLoader(VerwaltungApplication.class.getResource(fxml));

		Stage akt = VerwaltungApplication.getStage();
		//neue Scene wird auf eine neue Stage gesetzt
		try {
			Scene scene = new Scene(fxmlLoader.load());
			neue.setScene(scene);

			neue.show();
			neue.setHeight(height);
			neue.setWidth(width);
		}
		//wird die angegebene fxml Datei nicht gefunden, wird ein Alertfenster geöffnet
		catch (IOException | RuntimeException e) {
			Alert alert = new Alert(Alert.AlertType.ERROR);
			alert.setContentText("Beim Laden der Maske ist ein Fehler aufgetreten");
			alert.showAndWait();

			e.printStackTrace();
		}

	}

	/**
	 * Methode zum automatischen vergrößern und verkleinern von Grids
	 *
	 * Geschrieben: Max Heer, Sven Alteköster
	 *
	 * @param grid das responsiv sein soll
	 */
	public static void responsiveBreiteGrid (GridPane grid) {
		grid.widthProperty().addListener((obs, oldValue, newValue) -> {
			for (Node n : grid.getChildren()) {
				if (n instanceof Control) {
					((Control) n).setPrefWidth(newValue.floatValue() / grid.getColumnCount());
				}
			}
		});
	}

	public static void main(String[] args) {
		launch();
	}

}