package edu.caltech.cs2.project02.guessers;

import edu.caltech.cs2.project02.interfaces.IHangmanGuesser;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class AIHangmanGuesser implements IHangmanGuesser {
  private static final String BOOK_FILENAME = "data/scrabble.txt";

  @Override
  public char getGuess(String pattern, Set<Character> guesses) throws FileNotFoundException {
    Scanner s = new Scanner(new File(BOOK_FILENAME));
    SortedSet<String> newDictionary = new TreeSet<>();
    while(s.hasNext()){
      String next = s.next();
      String newWord = "";
      for (int i = 0; i < next.length(); i++){
        if (pattern.indexOf(next.charAt(i)) != -1){
          newWord += next.charAt(i);
        }
        else{
          newWord += "-";
        }
      }
      if (pattern.equals(newWord)){
        newDictionary.add(next);
      }
    }
    List<Character> nonGuessed = new ArrayList<>();
    for (char letter = 'a'; letter <= 'z'; letter++){
      if (!guesses.contains(letter)){
        nonGuessed.add(letter);
      }
    }
    char guess = '1';
    int maxValue = 0;
    for (char newGuess : nonGuessed){
      int value = 0;
      for (String word : newDictionary){
        if (word.indexOf(newGuess) != -1){
          value++;
        }
      }
      if (value > maxValue){
        guess = newGuess;
        maxValue = value;
      }
      if (value == maxValue){
        if (newGuess < guess){
          guess = newGuess;
        }
      }
    }
    return guess;
  }
}


