package game.View;

import game.Engine.GameView;
import game.Game;
import game.Object.GameMap;
import javafx.event.EventHandler;
import javafx.scene.control.Label;
import javafx.scene.effect.GaussianBlur;
import javafx.scene.effect.Glow;
import javafx.scene.effect.Reflection;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;

@game.Engine.Annotation.GameView
public class PauseView extends GameView {
    private GameMap map;
    private ImageView mapIv;
    private Label nameLbl;
    private ImageView resumeBtn;
    private ImageView exitBtn;

    public PauseView() {
        root = new Pane();
        Game.getInstance().resetMedia();

        map = Game.getInstance().getMapManager().getCurrentMap();
        mapIv = new ImageView(map.getMapImage());
        mapIv.setFitWidth(Game.getInstance().getWidth());
        mapIv.setFitHeight(Game.getInstance().getHeight());

        nameLbl = new Label("CrazyAlpha!");
        nameLbl.setTextFill(Color.WHITESMOKE);
        nameLbl.setFont(Game.getInstance().getResouceManager().getFont("Starcraft", 120));
        nameLbl.setLayoutX(50);
        nameLbl.setLayoutY(50);

        Reflection reflection1 = new Reflection();
        reflection1.setFraction(1.0);
        nameLbl.setEffect(reflection1);

        Reflection reflection02 = new Reflection();
        reflection02.setFraction(0.4);

        resumeBtn = new ImageView(Game.getInstance().getResouceManager().getControl("btn_resume"));
        resumeBtn.setFitWidth(165 * 1.5);
        resumeBtn.setFitHeight(65 * 1.5);
        exitBtn = new ImageView(Game.getInstance().getResouceManager().getControl("btn_exit"));
        exitBtn.setFitWidth(165 * 1.5);
        exitBtn.setFitHeight(65 * 1.5);

        resumeBtn.setLayoutX(map.getWidth() - resumeBtn.getFitWidth() - 20);
        resumeBtn.setLayoutY(map.getHeight() - resumeBtn.getFitHeight() - exitBtn.getFitHeight() - 120);
        resumeBtn.setEffect(reflection02);
        resumeBtn.setOnMouseEntered(event -> {
            resumeBtn.setEffect(new Glow(0.8));
            Game.getInstance().getButtonOverMusic().play();
        });
        resumeBtn.setOnMouseExited(event -> {
            resumeBtn.setEffect(reflection02);
            Game.getInstance().getButtonClickMusic().stop();
        });
        resumeBtn.setOnMousePressed(event -> {
            resumeBtn.setEffect(new GaussianBlur());
            Game.getInstance().getButtonClickMusic().play();
            Game.getInstance().resume();
        });
        resumeBtn.setOnMouseReleased(event -> {
            resumeBtn.setEffect(new Glow(0.8));
        });

        exitBtn.setLayoutX(map.getWidth() - exitBtn.getFitWidth() - 20);
        exitBtn.setLayoutY(map.getHeight() - exitBtn.getFitHeight() - 60);
        exitBtn.setEffect(reflection02);
        exitBtn.setOnMouseEntered(event -> {
            exitBtn.setEffect(new Glow(0.8));
            Game.getInstance().getButtonOverMusic().play();
        });
        exitBtn.setOnMouseExited(event -> {
            exitBtn.setEffect(reflection02);
            Game.getInstance().getButtonOverMusic().stop();
        });
        exitBtn.setOnMousePressed(event -> {
            exitBtn.setEffect(new GaussianBlur());
            Game.getInstance().getButtonClickMusic().play();
        });
        exitBtn.setOnMouseReleased(event -> {
            exitBtn.setEffect(new Glow(0.8));
            Game.getInstance().exit();
        });


        root.getChildren().add(mapIv);
        root.getChildren().add(nameLbl);
        root.getChildren().add(resumeBtn);
        root.getChildren().add(exitBtn);

        makeFadeTransition(resumeBtn, 2000, 1, 0.7);
        makeFadeTransition(exitBtn, 2000, 1, 0.7);
        makeFadeTransition(mapIv, 3000, 1, 0.8);
        makeScaleTransition(mapIv, 10000, 0.25, 0.25);
    }

    @Override
    public void update() {

    }

    @Override
    public void start() {

    }

    @Override
    public void stop() {

    }
}