package de.thdeg.grademanager.gui;

import de.thdeg.grademanager.JpaService;
import de.thdeg.grademanager.model.Course;
import de.thdeg.grademanager.model.Enrollment;
import de.thdeg.grademanager.model.Student;
import de.thdeg.grademanager.model.enumeration.Mark;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;

import java.io.IOException;
import java.util.Set;

public class StudentGradesController {

    protected Mark mark;
    @FXML
    protected ComboBox<Mark> markComboBox;
    ObservableList<Mark> markList = FXCollections.observableArrayList(Mark.values());

    private static Student student;
    public static void setStudent(Student student) {
        StudentGradesController.student = student;
    }

    private static Course course;
    public static void setCourse(Course course) {
        StudentGradesController.course = course;
    }

    @FXML
    protected void initialize() {
        markComboBox.setItems(markList);

        Set<Enrollment> enrollments = student.getEnrollments();
        for (Enrollment e: enrollments) {
            if(course.getId() == e.getCourse().getId()){
                if(e.getGrade() != null){
                    markComboBox.setPromptText(String.valueOf(e.getGrade()));
                }
            }
        }
    }

    @FXML
    protected void onSaveButtonClick(ActionEvent event) throws IOException {
        if (markComboBox.getValue() != null) {
            mark = markComboBox.getValue();

            Set<Enrollment> enrollments = student.getEnrollments();
            for (Enrollment e : enrollments) {
                if (course.getId() == e.getCourse().getId()) {
                    e.setGrade(mark.getMark());

                    JpaService jpaService = JpaService.getInstance();
                    jpaService.runInTransaction(entityManager -> {
                        entityManager.merge(e);
                        return null;
                    });
                    initialize();
                }
            }
        }

        SwitchWindowHelper.switchTo("Student Courses", event);
    }

    @FXML
    protected void switchToStudentCourses(ActionEvent event) throws IOException {
        SwitchWindowHelper.switchTo("Student Courses", event);
    }
}