package arrayclasses;

import java.util.*;

public class ClassList {
   private String courseTitle;
   private String discipline;
   private String semester;
   private String instructor;
   private ArrayList<StudentGrade> studentList;

   public ClassList(String title, String disc, String sem, String ins) {
      courseTitle = title;
      discipline = disc;
      semester = sem;
      instructor = ins;
      studentList = new ArrayList<StudentGrade>();
   }

   
   // This version allows duplicate entries
   public void add(StudentGrade s) {
       studentList.add(s);
   }

   public String getDiscipline() {
      return discipline;
   }

   public double getGrade(String studentID) {
      int position = find(studentID);
      if (position == -1)
         return -1;
      return studentList.get(position).getGrade();
   }

   public String getInstructor() {
      return instructor;
   }

   public String getSemester() {
      return semester;
   }

   public StudentGrade getStudent(String ID) {
      int position = find(ID);
      if (position == -1)
         return null;
      return studentList.get(position);

   }

   public String getTitle() {
      return courseTitle;
   }

   // This version changes the order of the students in the list
   public void remove(String ID) {
      int position = find(ID);
      if (position == -1)
         return;
      studentList.remove(position);
   }

   public void setGrade(String studentID, double grade) {
      int position = find(studentID);
      if (position == -1)
         return;
      studentList.get(position).setGrade(grade);
   }

   public String toString() {
      StringBuffer buf = new StringBuffer(getClass().getName() + "[title=" +
                                          courseTitle + ",discipline=" +
                                          discipline +
                                          ",semester=" + semester +
                                          ",instructor=" +
                                          instructor + "]");
      for (int i = 0; i < studentList.size(); i++)
         buf.append("\n" + studentList.get(i));
      return buf.toString();
   }

   private int find(String studentID) {
      for (int i = 0; i < studentList.size(); i++)
         if (studentID.equals(studentList.get(i).getStudentID()))
            return i;
      return -1;
   }
   
   // the following are the extensions
   
   public double getAverageGrade() {
	   int classSize = studentList.size();
       double sum = 0;
       if (classSize == 0)
           return 0.0;
       for (int i=0;i<classSize;i++)
           sum += studentList.get(i).getGrade();
       return sum/classSize;
   }
   
   public double getMaxGrade() {
       double max;
       if (studentList.size() == 0)
           return 0.0;
       max = studentList.get(0).getGrade();
       for (int i=1;i<studentList.size();i++)
           if (max < studentList.get(i).getGrade())
               max = studentList.get(i).getGrade();
       return max;
   }
   
   public double getMinGrade() {
	   int classSize = studentList.size();
       double min;
       if (classSize == 0)
           return 0.0;
       min = studentList.get(0).getGrade();
       for (int i=1;i<classSize;i++)
           if (min > studentList.get(i).getGrade())
               min = studentList.get(i).getGrade();
       return min;
   }
}
