import cs1.Keyboard;
import java.util.*;
import java.text.*;

public class College_Menu
{
	Instructor[] instructors = new Instructor[3];
	Student[] students = new Student[3];
	static Vector classes = new Vector();
	public static Vector regs = new Vector();
		//the vector 'regs' links Instructor, Student, and Course information


	public static void main(String[]args)				//@@@@@@@@@@@@@@@@
	{
		College_Menu cm = new College_Menu();
		cm.FillData();
		cm.mainMenu();
	}

	public void printArr()
	{
		for(int i = 0; i <  students.length; i++)
		{
			System.out.println(students[i]);
		}
	}

	public static Vector getCourseVector()
	{
		return classes;
	}




	private void FillData()		//using polimorphism technique pt, ft, tn
	{
		instructors[0] = new ptInstructor(100, "Tina Ostrander");
		instructors[1] = new ftInstructor(101, "Dee Skinner");
		instructors[2] = new tnInstructor(103, "Ron Davidson");

		students[0] = new Student(12, "John", "Woods");
		students[1] = new Student(34, "Asher", "Danner");
		students[2] = new Student(56, "Bobby", "Jones");

		classes.add(new Course("CSCI 100", "Computing", instructors[0], 5));
		classes.add(new Course("WRIT 143", "Writing", instructors[1], 5));
		classes.add(new Course("CSCI 200", "Networking", instructors[1], 9));
		classes.add(new Course("CSCI 105", "Micro Apps", instructors[2], 5));
		classes.add(new Course("CSCI 245", "JAVA", instructors[2], 12));

		regs.add(new Registration(((Course)classes.get(0)),students[0]));
		regs.add(new Registration(((Course)classes.get(1)),students[1]));
		regs.add(new Registration(((Course)classes.get(2)),students[2]));

/*
		for(int i = 0; i <regs.size();i++)		//before drop class
		{
			System.out.println("\n\n"+((Registration)regs.get(i)).toString());
		}
		students[0].DropClass((Course)classes.get(0));
		students[1].DropClass((Course)classes.get(1));
		students[2].DropClass((Course)classes.get(2));

		for(int i = 0; i <regs.size();i++)		//after drop class
		{
			System.out.println("\n\n"+((Registration)regs.get(i)).toString());
		}
*/
	}


	public  void mainMenu()
	{
		int choice;

		System.out.println("SMALL COMMUNITY COLLEGE");
		System.out.println("Course Registration System");
		System.out.println("Main Menu");
		System.out.println("---------------------------\n");

		System.out.println("1 -- Administrator");
		System.out.println("2 -- Instructor");
		System.out.println("3 -- Student");
		System.out.println("4 -- Exit");

		System.out.print("\nEnter your selection: ");
		choice = Keyboard.readInt();
		while (choice < 0 || choice >= 5)
		{
			System.out.print("\n\nError: Selection could be only 1-4: ");
			choice = Keyboard.readInt();
		}

		switch(choice)
		{
			case 1: Administrator();break;
			case 2: Instructor();break;
			case 3: Student();break;
			case 4: System.exit(0);break;
		}
	}


	public String viewInstructor()
	{
		DecimalFormat df = new DecimalFormat("##,##0");
		double totSalary=0;
		String viewIns = "\n\nNAME\t\tSSN\tSTATUS\t\tCREDITS\tSALARY\n\n";
		for(int i=0; i<instructors.length;i++)
		{
			viewIns+=instructors[i].getName()+"\t"+instructors[i].getSSN()+"\t"
			         +instructors[i].getStatus()+"\t"+instructors[i].teachCredits()
			         +"\t$"+df.format(instructors[i].getSalary())+"\n";

			totSalary+=instructors[i].getSalary();

		}

		viewIns+="\n\nTOTAL:\t\t\t\t\t\t$"+df.format(totSalary);
		return viewIns;
	}



	private  void Administrator()
	{
		int choice;
		do
		{
			System.out.println("\n\nAdministrators\n");
			System.out.println("1 -- Create Course");
			System.out.println("2 -- Remove Course");
			System.out.println("3 -- View Course");
			System.out.println("4 -- View Instructors");
			System.out.println("5 -- View Students");
			System.out.println("6 -- Back to Main Menu");

			System.out.print("\nEnter your selection: ");
			choice = Keyboard.readInt();
			while (choice < 1 || choice >= 7)
			{
				System.out.print("\n\nError: Selection could be only 1-6: ");
				choice = Keyboard.readInt();
			}

			switch(choice)
			{
				case 1:	System.out.println("\n\nCOURSE CREATED\n\n");break;
				case 2: System.out.println("\n\nCOURSE REMOVED\n\n");break;
				case 3: System.out.println("\n\nCOURSE VIEWED\n\n");break;
				case 4: System.out.println("\n\nVIEWED INSTRUCTORS\n\n");
				        System.out.println
				        (viewInstructor());break;
				case 5: System.out.println("\n\nVIEWED STUDENTS\n\n");break;
				case 6: System.out.println("\n\nBack to Main");break;
			}
		} while(choice > 0 && choice <=5);

		System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

		mainMenu();
	}

	private  void Instructor()
	{
		int choice;
		Instructor ins;
		Student s;
		Course c;
		double grade;
		do
		{
			System.out.println("\n\nInstructors\n");
			System.out.println("1 -- Enter Grade");
			System.out.println("2 -- View Course Roster");
			System.out.println("3 -- Back to Main");

			System.out.print("\nEnter your selection: ");
			choice = Keyboard.readInt();

			while (choice < 1 || choice >=4)
			{
				System.out.print("\n\nError: Selection could be only 1-3: ");
				choice = Keyboard.readInt();
			}

			switch(choice)
			{
				case 1: System.out.println("\n\nENTERING GRADE...\n\n");
						ins = findTeacher();
						s = findStudent();
						c = findCourse();
						System.out.print("ENTER GRADE: ");
						grade = Keyboard.readDouble();
						ins.EnterGrade(s, c, grade);
						break;

				case 2:	System.out.println("\n\nVIEWING ROSTER...\n\n");
						ins = findTeacher();
						c = findCourse();
						System.out.print(ins.ViewRoster(c));


						break;

				case 3:	System.out.println("\n\nBack to main\n\n");
						break;
			}
		}while(choice > 0 && choice <=2);

		System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

		mainMenu();
	}

	private  void Student()
	{
		int choice;
		Student s;
		Course c;


		do
		{
			System.out.println("\n\nStudents\n");
			System.out.println("1 -- Register for Class");
			System.out.println("2 -- Drop Class");
			System.out.println("3 -- View Transcript");
			System.out.println("4 -- Back to Main Menu");

			System.out.print("\nEnter your selection: ");
			choice = Keyboard.readInt();
			while (choice < 1 || choice >= 5)
			{
				System.out.print("\n\nError: Selection could be only 1-4: ");
				choice = Keyboard.readInt();
			}


			switch(choice)
			{


				case 1: System.out.println("\n\nCLASS REGISTRATION...\n\n");


						s = findStudent();
						c = findCourse();
						s.AddClass(c);	//pass course 'c' to student 's' object
						break;

				case 2:	System.out.println("\n\nDROPPING CLASS...\n\n");

						s = findStudent();
						c = findCourse();
						s.DropClass(c);	//pass course 'c' to student 's' object
						break;

				case 3:	System.out.print("\n\nVIEWING TRANSCRIPT...\n\n");

						s = findStudent();
						System.out.print(s.ViewTranscript());
						break;

				case 4:	System.out.println("\n\nBack to Main\n\n");
						break;

			}
		}while(choice > 0 && choice <= 3);

		System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

		mainMenu();
	}

	private Instructor findTeacher()
	{
		System.out.print("Enter Your Instructor SSN: ");
		int SSN = Keyboard.readInt();

		for (int i = 0; i<instructors.length; i++)
		{
			if(SSN ==instructors[i].getSSN())
			{
				return instructors[i];
			}
		}
		return null;
	}





	private Student findStudent()
	{
		System.out.print("Enter Your Student ID: ");
		int SID = Keyboard.readInt();

		for(int i = 0; i < students.length;i++)
		{
			if(SID == students[i].getSID())
			{
				return students[i];			//say, 45ab9c
			}
		}
		return null;
	}



	private Course findCourse()
	{
		System.out.print("Enter Your Course Number: ");
		String courseNum = Keyboard.readString();


		for(int i = 0; i < classes.size();i++)
		{
			if(courseNum.equals(((Course)classes.get(i)).getCourseNum()))
			{
				return (Course)classes.get(i);		//Return reference to object
													//say, 45ab9c
			}
		}
		return null;
	}
}
