import java.util.Scanner;
import java.io.File;
import java.util.ArrayList;

/**
 * Driver class for playing a text-based game of Hangman.
 *   @author Dave Reed (loosely based on code by Stuart Reges and Keith Schwarz)
 *   @version 1/29/16
 */
public class HangmanGame {
    public static final int MAX_GUESSES = 8;
    public static final String DICTIONARY_FILE = "dictionary.txt";

    public static void main(String[] args) throws java.io.FileNotFoundException {
        ArrayList<String> dictionary = new ArrayList<String>();
        Scanner dictfile = new Scanner(new File(HangmanGame.DICTIONARY_FILE));
        while (dictfile.hasNext()) {
            dictionary.add(dictfile.next().toLowerCase());
        }
        dictfile.close();
        
        Hangman hangman = new HonestHangman(dictionary);
        Scanner input = new Scanner(System.in);

        char play = 'y';
        while (play == 'y') {
            System.out.println("I'm thinking of a " + 
                                hangman.getRedactedWord().length() + 
                                " letter word.");

            int guessesLeft = HangmanGame.MAX_GUESSES;
            while (guessesLeft > 0 && hangman.getRedactedWord().contains("-")) {
                System.out.println("\nWrong guesses remaining: " + guessesLeft);
                System.out.println("Guessed so far: " + hangman.getGuesses());
                System.out.println("Current pattern: " + hangman.getRedactedWord());
                System.out.print("Your guess: ");

                char guess = input.next().toLowerCase().charAt(0);
                String result = hangman.makeGuess(guess);
                System.out.println(result);
                if (result.contains("Sorry")) {
                    guessesLeft--;
                }
            }

            if (hangman.getRedactedWord().contains("-")) {
                for (char ch : "abcdefghijklmnopqrstuvwxyz".toCharArray()) {
                    hangman.makeGuess(ch);
                }
                System.out.println("\nYOU LOSE!");
            }
            else {
                System.out.println("\nCONGRATULATIONS!");
            }
            System.out.println("The word was: " + hangman.getRedactedWord());
            System.out.println("\nPlay again? (y/n) ");
            play = input.next().toLowerCase().charAt(0);
            
            hangman.reset();
        }
        System.out.println("\nThanks for playing!");
        input.close();
    }
}
