package polling_station_dashboard.settings.java;

import javafx.event.Event;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

/**
 * Created by Vladimir Eliezer Tokarev on 12/06/2016.
 * This object manages the visual changes of the settings panel
 * which means that he opens and closes settings panel)
 */
public class SettingsVisualUpdater implements SettingsUpdate {

    private GridPane settings;
    private static final int SETTINGS_HEIGHT_EXPANSION_VALUE = 60;
    private boolean settingsOpened = false;
    private Stage currentStage;

    public SettingsVisualUpdater(GridPane settings, Stage primalStage)
    {
        this.settings = settings;
        this.currentStage = primalStage;
    }

    @Override
    public void UpdateSettings() {
        showSettingsButton(settingsOpened);
        if (!settingsOpened) {
            SetSettingsSize(SETTINGS_HEIGHT_EXPANSION_VALUE);
            addSettings();
        }
        else {
            SetSettingsSize(-SETTINGS_HEIGHT_EXPANSION_VALUE);
            removeSettings();
        }
        settingsOpened = !settingsOpened;
    }

    private void SetSettingsSize(int expansionHeight) {
        currentStage.setHeight(currentStage.getHeight() + expansionHeight);
        Pane statusLog = (Pane) currentStage.getScene().lookup("#Settings");
        statusLog.setPrefHeight(expansionHeight);
    }

    private void showSettingsButton(boolean showOrNot){
        Button settings = (Button) currentStage.getScene().lookup("#SettingsButton");
        settings.setVisible(showOrNot);
    }

    private void addSettings() {
        Pane settingsPane = (Pane) currentStage.getScene().lookup("#Settings");
        settingsPane.getChildren().add(settings);
    }

    private void removeSettings(){
        Pane settingsPane = (Pane) currentStage.getScene().lookup("#Settings");
        settingsPane.getChildren().remove(settings);
    }

    @Override
    public void handle(Event event) {
        UpdateSettings();
    }
}