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

public class SpellChecker {
  private Dictionary dictionary;
  private String dictFileName;
  
  public SpellChecker(String dictFile) {
      this.dictionary = new Dictionary(dictFile);
      this.dictFileName = dictFile;
  }
  
  public void checkFile(String textFile) {
      try {
          System.out.println("PROCESSING " + textFile);
          Scanner infile = new Scanner(new File(textFile));
          Scanner keyboard = new Scanner(System.in);
          
          Dictionary ignoredWords = new Dictionary();
          
          boolean dictChanged = false;
          while (infile.hasNext()) {
              String nextWord = infile.next();
              String cleanWord = this.clean(nextWord);
              if (!cleanWord.equals("") && !this.dictionary.findWord(cleanWord) && !ignoredWords.findWord(cleanWord)) {
                  System.out.print(cleanWord + ": (A)dd, (I)gnore. or (C)ontinue? ");
                  char response = keyboard.next().toUpperCase().charAt(0);
                  if (response == 'A') {
                      this.dictionary.addWord(cleanWord);
                      dictChanged = true;
                      System.out.println("adding...");
                  }
                  else if (response == 'I') {
                      ignoredWords.addWord(cleanWord);
                      System.out.println("ignoring...");
                  }
                  else if (response == 'C') {                      
                      System.out.println("continuing...");
                  }
                  else  {
                    System.out.println("Unknown response: try again.");
                  }
                }
          }
          
          if (dictChanged) {
              System.out.println("Updating " + this.dictFileName);
              this.dictionary.saveToFile(this.dictFileName);
          }
          System.out.println("DONE PROCESSING " + textFile);
      }
      catch (java.io.FileNotFoundException e) {
          System.out.println("File not found: " + textFile);
      }
  }
  
  public String clean(String str) {
      int start = 0;
      while (start < str.length() && !Character.isLetter(str.charAt(start))) {
          start++;
      }
      int end = str.length()-1;
      while (end >= 0 && !Character.isLetter(str.charAt(end))) {
          end--;
      }      
      
      if (start > end) {
          return "";
      }
      else {
          return str.substring(start, end+1);
      }
  }
}
