package de.thdeg.grademanager.gui;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;

import java.io.IOException;
import java.util.Optional;

public class CoursesOfStudyModificationController {
    @FXML
    protected ComboBox<String> bachelorDegreeComboBox;
    @FXML
    protected ComboBox<String> durationComboBox;

    ObservableList<String> bachelorDegreeList = FXCollections.observableArrayList("B. A.", "B. Eng.", "B. Sc.");
    ObservableList<String> durationList = FXCollections.observableArrayList("7 Semester", "8 Semester",
                                                                                    "9 Semester");

    @FXML
    protected void initialize() {
        MainController.setComboBox(bachelorDegreeComboBox, bachelorDegreeList);
        MainController.setComboBox(durationComboBox, durationList);
    }


    @FXML
    protected TextField name;
    @FXML
    protected String bachelorDegree;
    @FXML
    protected String duration;
    @FXML
    protected int fees;
    @FXML
    protected TextField courses;
    @FXML
    protected TextField fieldOfStudy;
    @FXML
    protected TextField warning;


    @FXML
    protected void onSaveButtonClick(ActionEvent event) throws IOException {
        if(!name.getText().isBlank() && bachelorDegreeComboBox.getValue() != null &&
                durationComboBox.getValue() != null && !fieldOfStudy.getText().isBlank())
        {
            bachelorDegree = bachelorDegreeComboBox.getValue();
            duration = durationComboBox.getValue();
            fees = 62;

            MainController.degreeList.add(name.getText());
            switchToMain(event);
        }
        else
        {
            warning.setText("Bitte alle Felder ausfüllen.");
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("Fehler");
            alert.setHeaderText("Bitte alle Felder ausfüllen.");
            Optional<ButtonType> result = alert.showAndWait();
        }
    }


    private Stage stage;
    private Scene scene;
    private FXMLLoader root;
    @FXML
    protected void switchToMain(ActionEvent event) throws IOException {
        root = new FXMLLoader(Main.class.getResource("main.fxml"));
        stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
        scene = new Scene(root.load(), 960, 540);
        stage.setTitle("Main");
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    protected void abortAndSwitchToMain(ActionEvent event) throws IOException {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle("Bestätigung erforderlich");
        alert.setHeaderText("Daten wurden nicht gespeichert. Änderungen verwerfen?");

        ButtonType buttonTypeOne = new ButtonType("Ja");
        ButtonType buttonTypeCancel = new ButtonType("Abbrechen", ButtonBar.ButtonData.CANCEL_CLOSE);

        alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);

        Optional<ButtonType> result = alert.showAndWait();
        if (result.get() == buttonTypeOne){
            switchToMain(event);
        }
    }

    @FXML
    protected void switchToCourseModification(ActionEvent event) throws IOException {
        root = new FXMLLoader(Main.class.getResource("course-modification.fxml"));
        stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
        scene = new Scene(root.load(), 960, 540);
        stage.setTitle("Course Modification");
        stage.setScene(scene);
        stage.show();
    }
}