package users;

import java.util.ArrayList;
import questions.Question;
import questions.TestBank;
import tests.Course;
import tests.Test;


/**
 * @author bnaftali
 *
 */
public class Instructor extends User{
	/**
	 * Instructor's list of questions.
	 */
	private ArrayList<Question> questionBank;
	/**
	 * Instructor's list of testbanks.
	 */
	private ArrayList<TestBank> testBank;
	
	/**
	 * Default constructor.
	 */
	public Instructor() {
		
	}
	
	/**
	 * @param add - question to add to Instructor's list of questions.
	 */
	public void addQuestion(Question add) {
		
	}
	
	/**
	 * Create a test and add it to list of tests.
	 */
	public void createTest() {
	
	}
	/**
	 * @param edit - Test to edit.
    
    pre:
      //
      // Test being edited exists in the Instructor's lists of tests
      // (found in their courses)
      exists (Instructor ins ;
         (ins.courses.contains(edit)))

    
	 */
      /* SPEST PROBLEM:
	 It looks like these error messages are incorrect

   Invalid id: courses at line: 52  at character: 14
   found: .  expecting: <UP> at line: 52 at character: 22

	since javac accepts the expression at line 52.
       */

	public void editTest(Test edit) {
         Instructor ins = null;
         boolean b = (ins.courses.contains(edit));
	}
	/**
	 * @param del - Test to delete from list of tests.
	 pre:
	 	//
	 	// The test to delete must have been created already
	 	//
	 	exists(Test test; 
	 		ins.courses.contains(test);
	 		test.equals(del));

	 post:
	 	//
	 	// The test must no longer be in the instructor's tests
	 	!exists(Test test;
	 		ins.courses'.contains(test);
	 		test.equals(del));
	 */
	public void removeTest(Test del) {

	}
	/**
	 * @param grade - Test to grade.
	 pre:
	 	//
	 	// The test to grade must exist in the instructor's test collection
		exists(Test test; 
	 		ins.courses.contains(test);
	 		test.equals(grade));
	 */
	public void gradeTest(Test grade) {
		
	}
	
	/**
	 * Create a test Bank.
	 */
	public void createTestBank() {
		
	}
	/**
	 * @param edit - Test Bank to edit.
	pre:
	 	//
	 	// The testbank to edit must have been created already
	 	//
	 	exists(TestBank tb; 
	 		ins.testbanks.contains(tb);
	 		tb.equals(edit));
	 */
	public void editTestBank(TestBank edit) {
		
	}
	/**
	 * @param del - Test Bank to delete.
	 	pre:
	 	//
	 	// The testbank to delete must have been created already
	 	//
	 	exists(TestBank tb; 
	 		ins.testbanks.contains(tb);
	 		tb.equals(edit));

	post:
	 	//
	 	// The testbank to delete must have been removed
	 	//
	 	!exists(TestBank tb; 
	 		ins.testbanks.contains(tb);
	 		tb.equals(edit));
	 */
	public void removeTestBank(TestBank del) {
		
	}
	
	/**
	 * Create a course to add to User's list of courses.
	 */
	public void createCourse() {
		
	}
	/**
	 * @param edit - Course to edit.
 	pre:
	 	//
	 	// The course to edit must have been created already
	 	//
	 	exists(Course course; 
	 		ins.courses.contains(course);
	 		course.equals(edit));
	 */
	public void editCourse(Course edit) {
		
	}
	/**
	 * @param edit - Course that is being added to
	 * @param add - Test that is being added to course.
	 pre:
	 	//
	 	// The course to add a test to must exist
	 	//
	 	exists(Course course; 
	 		ins.courses.contains(course);
	 		course.equals(edit))

			&&

	 	//
	 	// The test to add to the course must not already be 
	 	// in the course's test
	 	!exists(Test test;
	 		edit.tests.contains(test);
	 		test.equals(add));
	 */
	public void addToCourse(Course edit, Test add) {
		
	}

	/* (non-Javadoc)
	 * @see Users.User#removeCourse(Users.Course)
	 */
	public void removeCourse(Course del) {
		
	}
	
	/**
	 * @param view - Course that you are inspecting the statistics for.
	 pre:
	 	//
	 	// the course must be a part of the instructor's courses
	 	//
	 	exists(Course course; 
	 		ins.courses.contains(course);
	 		course.equals(view))
	 */
	public void viewStats(Course view) {
		
	}
	/**
	 * @param view - Test that you are inspecting the statistics for.
	 */
	public void viewTestStats(Test view) {
		
	}

	
	/* (non-Javadoc)
	 * @see Users.User#takeTest(Users.Test)
	 */
	public void takeTest(Test take) {
		
	}
	/* (non-Javadoc)
	 * @see Users.User#reviewTest(Users.Test)
	 */
	public void reviewTest(Test rev) {
		
	}
	
}