import cs1.Keyboard;
import java.text.*;
import GradeBook;

public class GPACalc4
{
	private String name;
	private int numElements;		//number of classes
	private double[] grades;			//array of grades
	private int[] credits;				//array of credits
	private int total_credit;
	private double total_points;
	private double gpa;
	private char Lgrade;			// a letter grade (A-F)
	private String PFstatus;		// Pass/Fail status

	public GPACalc4()	//default constructor
	{
	}


	public void getInput()
	{
		System.out.print("Enter student's name: \t");
		name = Keyboard.readString();

		System.out.print ("\nNumber of classes: \t");
		numElements = Keyboard.readInt();

		System.out.println();

		while (numElements < 1)
		{
			System.out.print ("You must enter at least one class");
			System.out.print ("\nNumber of classes: \t");
			numElements = Keyboard.readInt();
		}
		fillGradesCredits();
	}


	public void fillGradesCredits()
	{
		grades = new double[numElements];
		credits = new int[numElements];

		for (int i=0; i<=numElements-1; i++)
		{
			System.out.print ("Grade for class " + (i+1) + ":\t");
			grades[i] = Keyboard.readDouble();	////////// fill array grades

			while (grades[i] < 0 || grades[i] > 4)
			{
				System.out.println("Invalid grade");
				System.out.print ("Grade for class " + (i+1) + ": \t");
				grades[i] = Keyboard.readDouble();
			}

			System.out.print ("Credit for class " + (i+1) + ":\t");
			credits[i] = Keyboard.readInt();	///////// fill array credits

			while (credits[i] < 1 || credits[i] > 5)
			{
				System.out.println ("Invalid grade");
				System.out.print ("Credit for class " + (i+1) + ": \t");
				credits[i] = Keyboard.readInt();
			}
			System.out.println();
		}
	}


	public double calcGPA()
	{
		for (int i=0; i<=numElements-1; i++)
		{
			total_points = total_points + (grades[i] * credits[i]);
			total_credit = total_credit + credits[i];
			gpa = total_points/total_credit;
		}
		return gpa;
	}

	public char getLetterGrade()
	{
	             if (gpa >= 3.5 && gpa <= 4.0) {Lgrade = 'A';}
		else if (gpa >= 2.5 && gpa <  3.5) {Lgrade = 'B';}
		else if (gpa >= 1.5 && gpa <  2.5) {Lgrade = 'C';}
		else if (gpa >= 0.6 && gpa <  1.5) {Lgrade = 'D';}
		else if (gpa >= 0.0 && gpa <  0.6) {Lgrade = 'F';}
		return Lgrade;
	}

	public String getStatus()
	{
		if (gpa >= 2.0) {PFstatus = "PASSSS!";}
		else  {PFstatus = "Fail...";}
		return PFstatus;
	}

	public void DisplayGPA()
	{
		DecimalFormat dec = new DecimalFormat("0.00");

		System.out.println("\nGPA for " +name+ " is: " +dec.format(calcGPA()));
		System.out.println("Letter grade: " +getLetterGrade());
		System.out.println(getStatus());
	}


	public void call_GradeBook()
	{
		GradeBook GB = new GradeBook(grades);	//pass array grades to GradeBook
		GB.DisplayStatistics();
	}
}
