import acm.program.*;
import java.awt.*;
import java.util.*;
import java.io.*;

public class StanfordWhoSoln extends ConsoleProgram {

	private HashMap<String, ArrayList<String>> database = 
			new HashMap<String, ArrayList<String>>();
	
	public void run() {
		setFont("Courier-24");
		println("Stanford Who");
		loadData();
		while(true) {
			String query = readLine("? ");
			printQueryResponses(query);
		}
	}

	private void loadData() {
		try {
			Scanner input = new Scanner(new File("sls.txt"));
			while(input.hasNextLine()) {
				String line = input.nextLine();
				addLineToData(line);
			}
			input.close();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	// the input to this method is a studentLine
	// a few examples:
	//    "Chris Piech (cpiech)"
	//    "Brahm Capoor (bcapoor)"
	private void addLineToData(String student) {
		int parenStart = student.indexOf('(');
		int parenEnd = student.indexOf(')');
		
		// get the sunetId
		String sunetId = student.substring(parenStart + 1, parenEnd);
		// get the name 
		String name = student.substring(0, parenStart);
		
		// add parts to the database
		addToDatabase(sunetId, student);
		String[] parts = name.split(" ");
		for(String part : parts) {
			addToDatabase(part, student);
		}
	}

	private void addToDatabase(String part, String student) {
		part = part.toLowerCase();
		if(!database.containsKey(part)) {
			database.put(part, new ArrayList<String>());
		}
		ArrayList<String> soFar = database.get(part);
		soFar.add(student);
	}

	/* Print Query Responses
	 * ---------------------
	 * Print all students who have the query as either
	 * their sunetId or is one of their names
	 * Example queries:
	 * "Chris", "Capoor", "Maya", "mziv"
	 */
	private void printQueryResponses(String query) {
		query = query.toLowerCase();
		if(database.containsKey(query)) {
			println("Results:");
			ArrayList<String> students = database.get(query);
			for(String student : students) {
				println(student);
			}
		} else {
			println("No results.");
		}
		println("");
	}

}
