package eecs1022.examples;

import java.util.Scanner;

public class CalculateMileagesOfItinerary_V2 {

	public static void main(String[] args) {
		final int CHICAGO 	= 0;
		final int BOSTON 	= 1;
		final int NY 		= 2;
		final int ATLANTA 	= 3;
		final int MIAMI 	= 4;
		final int DALLAS 	= 5;
		final int HOUSTON 	= 6;
		
		int[][] distances = {
				{	0		, 983	, 787	, 714	, 1375	, 967	, 1087	}, 	/* row for Chicago	*/
				{	983		, 0		, 214	, 1102	, 1763	, 1723	, 1842	}, 	/* row for Boston 	*/
				{	787		, 214	, 0		, 888	, 1549	, 1548	, 1627	}, 	/* row for NY 		*/
				{	714		, 1102	, 888	, 0		, 661	, 781	, 810	}, 	/* row for Atlanta 	*/
				{	1375	, 1763	, 1549	, 661	, 0		, 1426	, 1187	}, 	/* row for Miami 	*/
				{	967		, 1723	, 1548	, 781	, 1426	, 0		, 239	}, 	/* row for Dallas 	*/
				{	1087	, 1842	, 1627	, 810	, 1187	, 239	, 0		}	/* row for Houston 	*/
		};

		Scanner input = new Scanner(System.in);
		System.out.println("How many cities?");
		int howMany = input.nextInt(); 
		input.nextLine();
		String[] trip = new String[howMany];
		int[] tripPos = new int[howMany];
		
		boolean someCityIsInvalid = false;
		String[] undefinedCities = new String[howMany];
		int numberOfUndefinedCities = 0;
		/* Read cities in the trip from the user. */
		for(int i = 0; i < howMany; i ++) {
			System.out.println("Enter a city:");
			String city = input.nextLine();
			
			trip[i] = city;
			if(city.equals("Chicago")) {
				tripPos[i] = CHICAGO;
			}
			else if(city.equals("Boston")) {
				tripPos[i] = BOSTON;
			} 
			else if(city.equals("NY")) {
				tripPos[i] = NY;
			} 
			else if(city.equals("Atlanta")) {
				tripPos[i] = ATLANTA;
			}
			else if(city.equals("Miami")) {
				tripPos[i] = MIAMI;
			}
			else if(city.equals("Dallas")) {
				tripPos[i] = DALLAS;
			}
			else if(city.equals("Houston")) {
				tripPos[i] = HOUSTON;
			}
			else {
				undefinedCities[numberOfUndefinedCities] = city;
				numberOfUndefinedCities++;
				someCityIsInvalid = true;
			}
		} 
		
		if(someCityIsInvalid) {
			System.out.print("Error: ");
			for(int i = 0; i < numberOfUndefinedCities; i ++) {
				System.out.print(undefinedCities[i]);
				if(i < numberOfUndefinedCities - 1) {
					System.out.print(", ");
				}
			}
			System.out.println(" are undefined.");
		}
		else {
			/* Add up source-to-destination distances. */
			int dist = 0;
			for(int i = 0; i < howMany - 1; i ++) {
				String srcCity = trip[i];
				String dstCity = trip[i + 1];
				int src = tripPos[i];
				int dst = tripPos[i + 1]; 
				int currentDist = 0;
				currentDist = distances[src][dst];
				dist += currentDist;
				System.out.println("From " + srcCity + " to " + dstCity + ": " + currentDist);
			}
			System.out.println("Distance: " + dist);
		}
		System.out.println("Bye!");
		input.close();
	}
}
