// Stuart Reges
// 3/10/04
//
// GrammarMain contains a main program that prompts a user for the name of a
// grammar file and then gives the user the opportunity to generate random
// versions of various elements of the grammar.

import java.io.*;
import java.util.*;

public class GrammarMain {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner console = new Scanner(System.in);
        System.out.println("Welcome to the cs145 random sentence generator.");
        System.out.println();

        // open grammar file
        System.out.print("What is the name of the grammar file? ");
        String fileName = console.nextLine();
        Scanner input = new Scanner(new File(fileName));

        // read the grammar file and construct the grammar solver
        List<String> grammar = new ArrayList<String>();
        while (input.hasNextLine())
            grammar.add(input.nextLine());
        GrammarSolver solver = 
            new GrammarSolver(Collections.unmodifiableList(grammar));

        showResults(console, solver);
    }

    // pre : console open for console reading, solver initialized
    // post: allows the user to repeatedly pick a grammar element to generate
    public static void showResults(Scanner console, GrammarSolver solver) {
        for(;;) {
            System.out.println();
            System.out.println("Available symbols to generate are:");
            System.out.println(solver.getSymbols());
            System.out.print("What do you want generated (return to quit)? ");
            String target = console.nextLine();
            if (target.length() == 0)
                break;
            if (!solver.grammarContains(target))
                System.out.println("Illegal symbol");
            else {
                System.out.print("How many do you want me to generate? ");
                if (!console.hasNextInt())
                    System.out.println("that's not an integer");
                else {
                    int number = console.nextInt();
                    if (number < 0)
                        System.out.println("no negatives allowed");
                    else {
                        String[] answers = solver.generate(target, number);
                        for (int i = 0; i < number; i++)
                            System.out.println(answers[i]);
                    }
                }
                console.nextLine();  // to position to next line
            }
        }
    }
}
