import java.util.ArrayList;
import java.util.Iterator;

public class Programme {
    static ArrayList<Activity> activities = new ArrayList<>();

    public Programme() {
        // Reset the activities list when a new Programme is created
        activities.clear();
    }

    // Performs a check to see if the programme is valid
    public boolean isValid() {
        //Initializes variables we need to test
        int sumProject = 0;
        int sumCourse = 0;
        int sumBasicCourse = 0;
        int countSubjectModuleProject = 0;
        int sumSubjectModuleCourse = 0;
        int countBachelorProject = 0;
        int countBasicProject = 0;
        int sumElectiveCourse = 0;

        //The program looks through every activity in the programme list and checks for specific classes
        for (Activity activity : activities) {
            String activityString = activity.toString();

            // Check for specific types based on toString() output
            if (activityString.startsWith("Basic Course:")) {
                sumBasicCourse += activity.getEcts();
                sumCourse += activity.getEcts();
            } else if (activityString.startsWith("Subject Module Course:")) {
                sumSubjectModuleCourse += activity.getEcts();
                sumCourse += activity.getEcts();
            } else if (activityString.startsWith("Elective Course:")) {
                sumElectiveCourse += activity.getEcts();
                sumCourse += activity.getEcts();
            } else if (activityString.startsWith("Course:")) {
                sumCourse += activity.getEcts();
            } else if (activityString.startsWith("Bachelor Project:")) {
                countBachelorProject += 1;
                sumProject += activity.getEcts();
            } else if (activityString.startsWith("Subject Module Project:")) {
                countSubjectModuleProject++;
                sumProject += activity.getEcts();
            } else if (activityString.startsWith("Basic Project:")) {
                countBasicProject++;
                sumProject += activity.getEcts();
            } else if (activityString.startsWith("Project:")) {
                sumProject += activity.getEcts();
            }
        }

        //It returns a boolean depending on the parameters are correct
        /* A valid programme must have activities from two subject modules,
        three basic projects, a bachelor project,
        and a further 50 ECTS of courses where at least 40 ECTS are basic courses.
        In a valid programme no activity can appear twice */

        return (
                sumCourse == 90
                        && sumProject == 90
                        && sumBasicCourse == 40
                        && countSubjectModuleProject == 2
                        && sumSubjectModuleCourse == 40
                        && countBachelorProject == 1);

    }

    public void add(Activity... activitiesArray) {
        for (Activity e : activitiesArray) {
            this.activities.add(e);
        }
    }

    public String toString() {
        StringBuilder ret = new StringBuilder();
        Iterator<Activity> it = activities.iterator();
        while (it.hasNext()) {
            ret.append(it.next());
            if (it.hasNext()) {
                ret.append(System.lineSeparator());
            }
        }
        return ret.toString();
    }
}