import Prog1Tools.*;

/** Ein einfaches Demonstrationsprogramm */
public class CodingDemo {

  /** Liest eine Textzeile ein, ver- und entschluesselt
   diese */
  public static void demo(Encoder enc) {
    // Lies die zu verschluesselnde Zeile ein
    String line=IOTools.readLine("Zu verschluesselnde Zeile: ");
    // Verschluessele die Zeile
    String encoded=enc.encode(line);
    System.out.println("Verschluesselt: " + encoded);
    // Entschluessele die Zeile
    String decoded=enc.decode(encoded);
    System.out.println("Entschluesselt: " + decoded);
    // Test: entsprechen sich Original und Kopie ?
    if (line.equals(decoded)) // Sind die beiden Strings gleich?
      System.out.println("VERSCHLUESSELUNG ERFOLGREICH!");
    else
      System.out.println("PROGRAMMFEHLER!");
  }
  
  /** Die Main-Methode liest einen Schluessel ein, baut ein
   Verschluesselungsobjekt auf und ruft die demo-Routine auf */
  public static void main(String[] args) {
    // Wir suchen uns eine zu verwendende Codierung aus
    System.out.println("Codierungs-Demo                    \n" +
                       "===================================\n" +
                       "1 = Demo mit \"Inflater\"-Algorithmus\n" +
                       "2 = Demo mit XOR-Verschluesselung  \n" +
                       "===================================\n" +
                       "\n"
                      );
    int auswahl = IOTools.readInteger("Ihre Wahl:");
    // Nun durchlaufen wir das eigentliche Demo-Programm
    switch(auswahl) {
      case 1:
        // Der Inflater kommt ohne einen Schluessel aus
        demo(new Inflater());
        break;
      case 2:
        // In diesem Fall brauchen wir noch einen Schluessel
        int key=IOTools.readInteger("Bitte Schluessel eingeben: ");
        Encoder enc = new XorEncoder(key);
        demo(enc);
        break;
      default:
        System.out.println("Ungueltige Auswahl!");
    }
  }
}
