//PhoneDirectoryDriver.java

/**
 * Tests an PhoneDirectory object for correctness.
 * 
 * @author Zach Tomaszewski
 * @version Sep 15, 2006
 */
public class PhoneDirectoryDriver {

  public static void main(String[] args) {
    
    System.out.println("Creating a new PhoneDirectory.");
    PhoneDirectory pd = new ListBasedPD();
    
    System.out.println("addEntrying six entries (should all go in)...");
    System.out.println("Bob - 123-4567");
    pd.addEntry("Bob", "123-4567");
    System.out.println("Jill - 555-4567");
    pd.addEntry("Jill", "555-4567");
    System.out.println("Adam - 000-0001");
    pd.addEntry("Adam", "000-0001");    
    System.out.println("Jack - 555-4567 [Duplicate number]");
    pd.addEntry("Jack", "555-4567");
    System.out.println("Eve - 000-0002");
    pd.addEntry("Eve", "000-0002");        
    System.out.println("Bob - 234-5678 [Duplicate name]");
    pd.addEntry("Bob", "234-5678");
     
    System.out.println("...done addEntrying.\n");
    
    System.out.println("Printing directory (should be ordered): ");
    //need to have implemented a toString method in your phone directory
    System.out.println(pd.toString());
    
    System.out.print("addEntrying a duplicate (Bob, 123-4567) [false]: ");
    boolean added = pd.addEntry("Bob", "123-4567");
    System.out.println(added);
    System.out.println("Printing directory again (should be as above): ");
    System.out.println(pd.toString());
    
    testLookupEntry(pd, "Jack", "555-4567");
    testLookupEntry(pd, "Bob", "123-4567, 234-5678");
    testLookupEntry(pd, "Jim", "null");
    
    System.out.print("\nRemoving Jack - 555-4567 [true]: ");
    System.out.println(pd.removeEntry("Jack", "555-4567"));
    System.out.print("Removing Bob - 123-4567 [true]: ");
    System.out.println(pd.removeEntry("Bob", "123-4567"));
    System.out.print("Removing Rimmer - 555-5555 [false]: ");
    System.out.println(pd.removeEntry("Rimmer", "555-5555"));

    System.out.println("Printing directory again (4 items, no dups): ");
    System.out.println(pd.toString());
    
    System.out.println("Testing save and load. ");
    //Assumes load is additive, and doesn't overwrite list
    pd.loadData("driver-test.txt");  //need to load first to set filename (stupid design)
    pd.save();
    
    pd = new ListBasedPD(); //try loading from file into fresh directory
    pd.loadData("driver-test.txt");
    System.out.println("Printing directory (should be as above):");
    System.out.println(pd.toString());
  }

  private static void testLookupEntry(PhoneDirectory pd, 
                                      String input, String expected) {
    System.out.print("Looking up " + input + "'s number [" + expected + "]: ");
    String[] results = pd.lookupEntry(input);
    System.out.println(java.util.Arrays.toString(results));
  }

}
