import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.swing.JFileChooser;

public class PhoneMnemonics {
    public static void main(String[] args) {
        // Read the dictionary into a list of Strings
        File selected = selectDictionary();
        if(selected == null) return;
        System.out.println("Loading dictionary...");
        Set<String> dict = new HashSet<String>();
        try {
            BufferedReader in = new BufferedReader(new FileReader(selected));
            String line = in.readLine();
            while(line != null) {
                dict.add(line.toUpperCase());
                line = in.readLine();
            }
            in.close();
        } catch(IOException e) {
            System.err.println("Could not open dictionary.");
            System.exit(0);
            return;
        }

        // Read phrases from the user and display results
        BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
        while(true) {
            System.out.print("Phone number (empty line to quit): ");
            String number;
            try { number = console.readLine(); }
            catch(IOException e) { e.printStackTrace(); return; }
            if(number == null || number.length() == 0) break;

            number = number.trim().replace("-", "");

            List<String> mnemonics = computeMnemonics(dict, number);
            if(mnemonics.isEmpty()) {
                System.out.println("No mnemonics found.");
            } else {
                int count = mnemonics.size();
                System.out.println(count + " mnemonics found:");
                for(int i = 0; i < 25 && i < count; i++) {
                    System.out.println("  " + mnemonics.get(i));
                }
                if(count > 25) {
                    System.out.println("others not displayed");
                }
            }
        }
    }

    private static File selectDictionary() {
        // First check whether dictionary is already there
        File ret = new File("/usr/share/dict/words");
        if(ret.canRead()) return ret;

        // Otherwise ask the user to select the data file
        JFileChooser chooser = new JFileChooser();
        chooser.setDialogTitle("Select Data File");
        int result = chooser.showDialog(null, "Select");
        if(result == JFileChooser.APPROVE_OPTION) {
            return chooser.getSelectedFile();
        } else { // dialog canceled
            System.err.println("File not selected canceled; program complete");
            return null;
        }
    }

    private static List<String> computeMnemonics(Set<String> dict,
            String number) {
        return new ArrayList<String>();
    }
}
