module Sched;

 	from RoomDB import RoomDB, RoomRecord;
	from CourseDB import CourseDB, CourseRecord;
	from StudentApp import Summer, Winter, Spring, Fall;
	from Teacher import TeacherDatabase, TeacherRecord, Monday, Tuesday, Wednesday, Thursday, Friday;
export Schedule, Time, section, ClassAssignment, daysOfWeek, day;

object Schedule is
   components: ca:ClassAssignment*, CourseDB, TeacherDatabase, RoomDB,
		term, year, phase, department;
   description: (*
      This object represents a schedule in the admin portion.  
      Schedule includes the databases used to create it.
   *);
end Schedule;


object ClassAssignment is
   components: tr:TeacherRecord, rr:RoomRecord, cr:CourseRecord, t:Time, s:section;
   description: (*
      This object represents the connection made between a teacher, room, CourseRecord, 
         and Time
      Assumes that TeacherRecord, RoomRecord, and CourseRecord are described in another RSL
   *);
end ClassAssignment;


object Time is
   components:  h:Hour, m:Minute, d:Duration, dow:daysOfWeek;
   description: (*
      Time represents the starting time, and how long a class will go.
	And what days too.
   *);
end Time;


object Hour is integer;
object Minute is integer;
object Duration is integer;
object daysOfWeek is day*;
object day is Monday or Tuesday or Wednesday or Thursday or Friday;


object term is Summer or Spring or Winter or Fall;
object year is integer;
object phase is integer;
object department is string;
object section is integer;


operation GenerateSchedule
	inputs: CourseDB, TeacherDatabase, RoomDB, Schedule;
	outputs: Schedule;
	description: (*
		GenerateSchedule is the big operation that makes many schedules 
		and prints out the best one
	*);
end GenerateSchedule;


operation NewSchedule
	inputs: CourseDB, TeacherDatabase, RoomDB;
	outputs: Schedule;
	description: (*
		NewSchedule will be the operation for when the admin user selects new 
		from any of the various start points.
	*);
end NewSchedule;

end Sched;