package schedule;

import java.util.Collection;
import java.util.Date;
import database.Course;
import database.Room;
import database.Instructor;

/**
 * A course that was generated by a schedule.
 * @author jmiran03
 */
public abstract class ScheduleCourse {
  /**  
   * The possible Departments that a schedule can be. 
   */
  public enum Department { CSC, CPE, SE };
  
  /**  
   * The department. 
   */
  Department department;

  /**  
   * The colist department. 
   */
  Department colistDepartment;

  /**  
   * The course. 
   */
  Course course;

  /**  
   * The section. 
   */
  int section;

  /**  
   * The class number. 
   */
  int classNumber;

  /**  
   * The room this course is located in. 
   */
  Room room;

  /**  
   * The days this course will be taught. 
   */
  DayPattern dayPattern;

  /**  
   * The time this course begins. 
   */
  Date startTime;

  /**  
   * The time this course ends. 
   */
  Date endTime;

  /**  
   * The instructor 
   */ 
  Instructor instructor;

  /**
   * Sets the department for this course.
   * @param department The department to set.
   */
   /*@ 
    requires
      department != null;
    ensures
      this.department == department;
  @*/
  abstract void setDepartment(Department department);

  /**
   * Sets the colist department for this course.
   * @param department The department to set.
   */
  /*@ 
    requires
      department != null;
    ensures
      this.colistDepartment == department;
  @*/
  abstract void setColistDepartment(Department department);

  /**
   * Sets the section.
   * @param section The section.
   */
  /*@ 
    ensures
      this.section == section;
  @*/
 abstract void setSection(int section);

  /**
   * Sets the room.
   * @param room The room.
   */
  /*@ 
    requires
      room != null;
    ensures
      this.room == room;
  @*/
  abstract void setRoom(Room room);
  
  /**
   * Sets the DayPattern.
   * @param dayPattern The day pattern.
   */
  /*@ 
    requires
      dayPattern != null;
    ensures
      this.dayPattern == dayPattern;
  @*/
  abstract void setDayPattern(DayPattern dayPattern);

  /**
   * Sets the start time.
   * @param startTime The start time.
   */
  /*@ 
    requires
      startTime != null;
    ensures
      this.startTime == startTime;
  @*/
  abstract void setStartTime(Date startTime);

  /**
   * Sets the end time.
   * @param endTime The end time.
   */
  /*@ 
    requires
      endTime != null;
    ensures
      this.endTime == endTime;
  @*/
  abstract void setEndTime(Date endTime);

  /**
   * Sets the instructor.
   * @param instructor The instructor.
   */
  /*@ 
    requires
      instructor != null;
    ensures
      this.instructor == instructor;
  @*/
  abstract void setInstructor(Instructor instructor);
}