package addBk.addressBook;

//AddressDisplay.java


public class AddressDisplay
    extends AddressBookFrame {
  static AddressBookRecord storageRecord;
  static boolean editFlag = false;
  static boolean emptyDb = true;

  static AddressBookFrame adf =
      new AddressBookFrame();
  static AddressBookDatabase abd =
      new AddressBookDatabase();
  static AddressDisplay display =
      new AddressDisplay();

  public static void main(String args[]) {
    adf.init();
    display.setTextFieldValues(abd.getEmptyDbRecord());
    editFlag = false;
  }

  public void setTextFieldValues(AddressBookRecord abr) {
    adf.tf.setText(abr.name);
    adf.ap.t0.setText(abr.address);
    adf.ap.t1.setText(abr.notes);
    adf.tbp.tfp.t0.setText(abr.dial_1);
    adf.tbp.tfp.t1.setText(abr.dial_2);
    adf.tbp.tfp.t2.setText(abr.dial_3);
    adf.ep.tfp.t0.setText(abr.dial_1);
    adf.ep.tfp.t1.setText(abr.dial_2);
    adf.ep.tfp.t2.setText(abr.dial_3);
  }

  public AddressBookRecord getTextFieldValues() {
    AddressBookRecord abr =
        new AddressBookRecord();
    abr.name = adf.tf.getText();
    abr.address = adf.ap.t0.getText();
    abr.notes = adf.ap.t1.getText();
    if (!editMode) {
      abr.dial_1 = adf.tbp.tfp.t0.getText();
      abr.dial_2 = adf.tbp.tfp.t1.getText();
      abr.dial_3 = adf.tbp.tfp.t2.getText();
    } else {
      abr.dial_1 = adf.ep.tfp.t0.getText();
      abr.dial_2 = adf.ep.tfp.t1.getText();
      abr.dial_3 = adf.ep.tfp.t2.getText();
    }
    return (abr);
  }

  public void nextRecord() {
    abd.incrementRecord();
    storageRecord = (abd.readRecord());
    display.setTextFieldValues(abd.readRecord());
  }

  public void prevRecord() {
    abd.decrementRecord();
    storageRecord = (abd.readRecord());
    display.setTextFieldValues(abd.readRecord());
  }

  public void addRecord() {
    AddressBookRecord abr = display.getTextFieldValues();
    abd.addRecord(abr);
    storageRecord = (abd.readRecord());
    adf.ip.indexList.add(abr.name);
    display.setIndexItems();
    display.editFlag = false;
  }

  public void deleteCurrentRecord() {
    abd.deleteCurrentRecord();
    display.setIndexItems();
    display.editFlag = false;
    storageRecord = (abd.readRecord());
  }

  public void saveCurrentRecord() {
    System.out.println("saving current record");
    abd.saveCurrentRecord(getTextFieldValues());
    abd.sort();
    display.setIndexItems();
    storageRecord = (abd.readRecord());
    display.editFlag = false;
  }

  public void revertRecord() {
    //System.out.println("reverting current record");
    abd.saveCurrentRecord(storageRecord);
    storageRecord = (abd.readRecord());
    display.setTextFieldValues(abd.readRecord());
    display.editFlag = false;
  }

  public void setEditFlag() {
    display.editFlag = true;
  }

  public void toggleIndexDisplay() {
    if (indexToggle == true) {
      indexToggle = false;
      adf.init();
    } else {
      indexToggle = true;
      adf.init();
    }
  }

  public void setIndexItems() {
    adf.ip.indexList.removeAll();
    for (int i = 0; i < (abd.getNumRecords()); i++) {
      AddressBookRecord abr = abd.readRecord(i);
      adf.ip.indexList.add(abr.name);
    } // end for
  }

  public void setRecord(int i) {
    abd.setRecordNumber(i);
    AddressBookRecord abr = abd.readRecord();
    display.setTextFieldValues(abr);
    storageRecord = (abd.readRecord());
  }

  public void toggleEditPanel() {
    if (editMode == true) {
      editMode = false;
      adf.tf.setEditable(false);
      adf.ap.t0.setEditable(false);
      adf.ap.t1.setEditable(false);
      adf.init();
      System.out.println("Edit mode OFF");
    } else {
      editMode = true;
      adf.tf.setEditable(true);
      adf.ap.t0.setEditable(true);
      adf.ap.t1.setEditable(true);
      adf.init();
      System.out.println("Edit mode ON");

      if (emptyDb) {
        // auto add record in edit mode when none
        AddressBookRecord abr =
            new AddressBookRecord();
        abr.name = "new record";
        display.setTextFieldValues(abr);
        display.addRecord();
        emptyDb = false;
      }

    }
  }

  public void dbMerge() {
    new CSVMerge(abd);
    abd.sort();
    display.setRecord(0);
    display.setIndexItems();
    emptyDb = false;
  }

  public void dbExport() {
    new CSVExport(abd);
  }

  public void dbOpen() {
    abd.openDb();
    display.setTextFieldValues(abd.readRecord());
    display.setRecord(0);
    display.setIndexItems();
    emptyDb = false;
  }

  public void dbSave() {
    abd.saveDb();
  }

}