// SPDX-FileCopyrightText: 2025 Jonas Smedegaard <dr@jones.dk>
// SPDX-License-Identifier: GPL-3.0-or-later

package dk.biks.bachelorizer;

import java.util.List;

/// Bachelorizer - Controller
public class Control {

	/// Application model
	// (declared explicitly only to silence javadoc)
	private GUI model;

	/// Application view
	private Window view;

	/// Parameters passed on command-line and in JNLP file
	private List<String> parameters;

	/// Default constructor
	///
	/// @param model  Application model
	/// @param view   Application view
	public Control(final GUI model, final Window view) {
		this.model = model;
		this.view = view;
	}

	/// parse application parameters
	///
	/// parse parameters as GNU-style options and arguments,
	/// i.e. treat dash-prefixed words as options
	/// until an optional first bare "--",
	/// taking first non-option argument as name of student
	/// and remaining ones as activity selections
	///
	/// @param parameters  Application parameters
	public final void setParameters(final List<String> parameters) {
		boolean optionsDone = false;
		boolean studentAssigned = false;
		for (String item: parameters) {
			if (!optionsDone && item.matches("--")) {
				optionsDone = true;
			} else if (!item.startsWith("-")) {
				if (!studentAssigned) {
					model.addStudent(item);
					studentAssigned = true;
					showStudent();
				} else {
					model.addActivity(item);
					showActivities();
				}
			}
		}
	}

	/// Enter activity
	///
	/// @param s  String entered
	public final void enterActivity(final String s) {
		model.addActivity(s);
		view.clearActivityEntry();
		showActivities();
	}

	/// Display student
	public final void showStudent() {
		view.setStudentName(model.getStudentName());
	}

	/// Display list of activity entries
	public final void showActivities() {
		String toarea = "";
		for (String t: model.getActivities()) {
			toarea += t + "\n";
		}
		view.setArea(toarea);
	}

	/// drop last activity entry
	public final void delOne() {
		model.delOneActivity();
		showActivities();
	}

	/// drop all activity entries
	public final void delAll() {
		model.delAllActivities();
		showActivities();
	}
}