package de.thdeg.grademanager.gui;

import de.thdeg.grademanager.JpaService;
import de.thdeg.grademanager.model.CoursesOfStudy;
import de.thdeg.grademanager.model.enumeration.Degree;
import de.thdeg.grademanager.model.enumeration.Semester;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;

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

public class CoursesOfStudyModificationController {
    @FXML
    protected ComboBox<Degree> degreeComboBox;
    @FXML
    protected ComboBox<Semester> durationComboBox;

    ObservableList<Degree> degreeList = FXCollections.observableArrayList(Degree.values());
    ObservableList<Semester> durationList = FXCollections.observableArrayList(Semester.values());

    @FXML
    protected void initialize() {
        degreeComboBox.setItems(degreeList);
        durationComboBox.setItems(durationList);
    }


    @FXML
    protected TextField name;
    @FXML
    protected Degree degree;
    @FXML
    protected Semester duration;
    @FXML
    protected int fees;
    @FXML
    protected TextField fieldOfStudy;
    @FXML
    protected TextField warning;

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

            CoursesOfStudy coursesOfStudy =new CoursesOfStudy(
                    name.getText(),
                    degree.getDegree(),
                    durationComboBox.getValue().getSemester(),
                    fees,
                    fieldOfStudy.getText());


            JpaService jpaService = JpaService.getInstance();
            jpaService.runInTransaction(entityManager -> {entityManager.persist(coursesOfStudy); return null;});

            SwitchWindowHelper.switchTo("Main", 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();
        }
    }

    @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) {
            SwitchWindowHelper.switchTo("Main", event);
        }
    }
}