import java.util.Scanner;

public class CarMain
{
   /*************************************************************
    * This function creates 5 CarStat objects and loops through 
    * several races, prompting for track statistics and 
    * racer statistics on each loop.
    *************************************************************/
   public static void main (String args[])
   {
      final int EOF = -1;
      
      CarStat racer1;      // first driver stats
      CarStat racer2;      // second driver stats
      CarStat racer3;      // third driver stats
      CarStat racer4;      // fourth driver stats
      CarStat racer5;      // fifth driver stats
      
      double miles;         // miles for this race
      double size;          // size of this track
   
      Scanner  stdin;      // Input stream
      String   prompt;     // String for input prompts

      stdin = new Scanner(System.in);
   
      //-----------------------------------------------------
      // create drivers
      //-----------------------------------------------------      
     
      racer1 = new CarStat("Dale Jr", 8);
      racer2 = new CarStat("Elliott Sadler", 19); // JMU alum
      racer3 = new CarStat("Jeff Gordon", 24);
      racer4 = new CarStat("Denny Hamlin", 11);
      racer5 = new CarStat("Jeff Burton", 31);
      
      //-----------------------------------------------------
      // Start getting race statistics
      //----------------------------------------------------- 
      size = Util139.readDouble(stdin, "Enter the " +
       "size of the track in miles, " + EOF + " to end: ");
      while (size != EOF)      
      {
         miles = Util139.readDouble(stdin, "Enter the " +
          "length of this race in miles: ");
         
         CarStat.setupRace(size, miles);
         
         //-------------------------------------------------
         // Enter each driver's stats for this race
         //-------------------------------------------------
         
         processDriverStats(stdin, racer1);
         processDriverStats(stdin, racer2);
         processDriverStats(stdin, racer3);
         processDriverStats(stdin, racer4);
         processDriverStats(stdin, racer5);
                  
         //-------------------------------------------------
         // Get ready for next race
         //-------------------------------------------------
         
         size = Util139.readDouble(stdin, "Enter the " +
          "size of the next track in miles, " + EOF + " to end: ");
      }
      
      //---------------------------------------------------------
      // Print final stats
      //---------------------------------------------------------
      
      System.out.printf("Final stats\n");
      System.out.printf("%s, %%Led:%.2f%%\n",racer1.toString(), 
       racer1.percentMilesLed());
      System.out.printf("%s, %%Led:%.2f%%\n",racer2.toString(), 
       racer2.percentMilesLed());
      System.out.printf("%s, %%Led:%.2f%%\n",racer3.toString(), 
       racer3.percentMilesLed());
      System.out.printf("%s, %%Led:%.2f%%\n",racer4.toString(), 
       racer4.percentMilesLed());
      System.out.printf("%s, %%Led:%.2f%%\n",racer5.toString(), 
       racer5.percentMilesLed());
   }

   /**************************************************************** 
    * Helper method to prompt for, read, and update a single drivers 
    * race stats.
    * @param racer CarStat object
    ***************************************************************/ 
   public static void processDriverStats(Scanner input, CarStat racer)
   {
      int laps;           // laps led
      int position;       // position of finish
      String prompt;      // builds the prompt
      String driver;      // Drvier's name
      
      driver = racer.getDriver();
      prompt = "Enter " + driver + "'s laps led: ";
      laps = Util139.readInt(input, prompt);
      prompt = "Enter the " + driver + "'s finish position: ";
      position = Util139.readInt(input, prompt);
      racer.updateRaceStats(laps, position);
   }      
}
