// SPDX-FileCopyrightText: <Alexander Marthin Klemensen stud-marthin@ruc.dk>
// SPDX-FileCopyrightText: <Ian Valentin Christensen stud-ianc@ruc.dk>
// SPDX-FileCopyrightText: <Zahed Noos zahed@ruc.dk>
// SPDX-License-Identifier: GPL-3.0-or-later

package com.example.portfolio2;

import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;

import java.util.List;

class Controller{
	private Model model;
	private HelloApplication view; // We do this without using the view directly like this, instead passing options.
	void initialize() { // calls on the database
		model.initialize();
	}
	Controller(Model model, HelloApplication view){
		this.model=model; this.view=view;
	}
	void onComboSelected(ComboBox<String> combo, ComboBox<String> select, TextArea area) {
		select.getItems().clear(); // Clear the activity selection box
		area.clear(); // Clear text area
		select.getItems().addAll(model.selectProgram((String) combo.getValue())); // Fill activity box using model method
	}
	void onActivitySelected(ComboBox<String> combo, ComboBox<String> select, TextArea area) {
		addActivity((String) select.getValue(), area); // Passes the value chosen in the box
		updateArea(combo, area); // Updates the text area based on the category choice
		// users can choose from the ComboBox, string (activity) and the area would update.
	}
	void onSubjectModuleSelected(ComboBox<String> subject1, ComboBox<String> subject2, List<String> subjectModules) {
		// Beautiful loop we've created to remove option chosen in one subject module box from the other
		for (String sub : subjectModules) {
			if (sub.equals(subject1.getValue())) {
				subject2.getItems().remove(subject1.getValue());
			} else if (!sub.equals(subject1.getValue()) && !subject2.getItems().contains(sub)) {
				subject2.getItems().add(sub);
			}
		}
	}
	void addActivity(String s, TextArea textArea) { // Calls on model method to add participation in the database
		model.addParticipation(model.getActivityIndeks(s));
	}
	void updateArea(ComboBox combo, TextArea textArea) { // Clears the text area and adds all activity names from activities in participation
		textArea.clear();
		for(String s : model.getParticipation((String) combo.getValue())) {
			textArea.appendText(s + "\n");
		}
	}
	void updateEcts(Label ectslabel, ComboBox<String> comboBox) { // Updates the labels with the current ECTS of the program type
		ectslabel.setText("ECTS: "+model.getSumEcts(comboBox.getValue()));
	}
	void fillElective(ComboBox<String> electiveBox) {
		electiveBox.getItems().addAll(model.getAllActivities());
	}
}