import java.util.Scanner;

/**
 * A class that reads input lines from the user.
 * Input is filtered via getCommand for valid commands.
 *
 * @author David J. Barnes and Michael Kölling.
 * @version 2011.07.31
 */
public class Parser 
{
    // Hold all valid command words.
    private CommandWords commands;
    private Scanner reader;

    public Parser() 
    {
        commands = new CommandWords();
        reader = new Scanner(System.in);
    }

    /**
     * Read the next command from the user.
     * The returned command will be valid.
     * @return A valid command.
     */
    public String getCommand() 
    {
        String command = null;
        do {
           // Print a prompt.
            System.out.print("> ");
            
            String word = reader.next();
            // Discard the rest of the line.
            readLine();
            if(commands.isCommand(word)) {
                command = word;
            }
            else{
                System.out.println("Unrecognized command: " + word);
                System.out.print("Valid commands are: ");
                commands.showAll();
            }
        } while(command == null);
    
        return command;
    }

    /**
     * Print out a list of valid command words.
     */
    public void showCommands()
    {
        commands.showAll();
    }

    /**
     * @return A line of text from the user.
     */
    public String readLine()
    {
        return reader.nextLine();
    }
}
