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

package dk.biks.bachelorizer;

import java.util.ArrayList;
import java.util.List;

/// Bachelorizer - reference storage model
abstract class Storage {

	/// default constructor
	// (declared explicitly only to silence javadoc)
	Storage() { }

	/// initialization as needed
	abstract void initialize();

	/// add student
	///
	/// @param name  Name of student
	public abstract void addStudent(String name);

	/// get student name
	///
	/// @return  name of student
	public abstract String getStudentName();

	/// resolve activity index from name
	///
	/// @param name  activity name
	/// @return      index of activity as integer
	abstract int getActivityIndeks(String name);

	/// insert activity into participation
	///
	/// @param activityIndex  index of activity
	abstract void addParticipation(int activityIndex);

	/// list currently participating activities
	///
	/// @param program  programme name
	/// @return         names of participating activities
	abstract ArrayList<String> getParticipation(String program);

	/// purge participation choices
	abstract void clearParticipation();

	/// list activities within a program
	///
	/// @param program  programme name
	/// @return         names of contained activities
	abstract ArrayList<String> selectProgram(String program);

	/// sum of ECTS points under the given category
	///
	/// @param program  programme name
	/// @return         ECTS points as String
	abstract String getSumEcts(String program);

	/// list of available subject modules
	///
	/// @return  names of all subject modules as list of strings
	abstract List<String> getAllSubjects();

	/// list of available activities
	///
	/// @return  names of all activities as list of strings
	abstract ArrayList<String> getAllActivities();
}