package chat;



import java.io.BufferedReader;

import java.io.File;

import java.io.FileWriter;

import java.io.InputStreamReader;

import java.io.IOException;

import java.util.Vector;



/**
 * Classe che rappresenta la finestra di <i>input</i> della <i>chat</i>;
 * possiede un unico metodo: il <code>main()</code>. Gli argomenti
 * della linea di comando vengono completamente ignorati.
 * <p>
 * L'applicazione elabora le linee testuali introdotte dallo <i>standard
 * input</i>, dopodiché invia quelle ritenute valide al file che viene
 * usato come <i>input</i> dalla classe <code>chat.Monitor</code>.
 * <p>
 * Architetturalmente costituisce il lato <i>client</i> del sistema
 * software complessivo.
 * <p>
 *
 * @author    <em>Marco Cimatti</em>
 * @version   1.0
 * @see       Monitor
 * @see       Monitor#FILE_SWAP
 */
public class Console {

  /**
   * L'<i>entry-point</i> del programma.
   *
   * @param   args   gli argomenti della linea di comando; vengono ignorati.
   */
  public static void main(String[] args) {
    final String HELP = "\n ? , help           - Visualizza questo help." +
                        "\n *                  - Mostra l'archivio delle conoscenze." +
                        "\n > , <              - Elenca gli interlocutori." +
                        "\n >pippo , > pippo   - Cerca di contattare [pippo]." +
                        "\n <pluto , < pluto   - Accetta di dialogare con [pluto]." +
                        "\n .                  - Termina il dialogo in corso." +
                        "\n bye,exit,quit,stop - Uscita.\n";

    BufferedReader stdin  = new BufferedReader(new InputStreamReader(System.in));
    String         prompt = "";
    do {
      System.out.print("Inserisci il nickname da usare: ");
      try {
        prompt = stdin.readLine().trim();
      } catch (IOException e) {}
    } while (prompt.length() == 0);

    File f = new File(Monitor.FILE_SWAP);
    if (f.exists() && !f.delete()) {
      System.out.println("Impossibile cancellare " + f.getName() + ".");
      System.exit(1);
    }
    FileWriter swap = null;
    Database   db   = null;
    try {
      swap = new FileWriter(f);
      swap.write(prompt + "\n");   // Scrittura del proprio nickname

      swap.flush();
      db = new Database(Monitor.FILE_DATABASE);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(2);
      }
    db.cancella(prompt);   // Eliminazione dello user dalla rubrica


    Vector cmd_uscita = new Vector();
    cmd_uscita.add("bye");
    cmd_uscita.add("exit");
    cmd_uscita.add("quit");
    cmd_uscita.add("stop");

    prompt = "[" + prompt + "]$ ";   // Rifinitura del prompt

    String cmd = "";
    do   // Main-loop

      try {
        System.out.print(prompt);
        if ((cmd = stdin.readLine().trim()).length() == 0)
          continue;
        if (cmd.equals("?") || cmd.equals("help"))
          System.out.println(HELP);
        else
          if (cmd.equals("*")) {   // Visualizzazione del database

            Contatto[] vett = db.tutti();
            for (int i = 0; i < vett.length; System.out.println(" " + vett[i++].nome())) ;
          }
          else {
            if (cmd.startsWith(">") && cmd.length() > 1)
              if (!db.contiene(cmd.substring(1).trim())) {
                System.out.println("\"" + cmd.substring(1).trim() + "\" sconosciuto.");
                continue;
              }
            swap.write(cmd + "\n");
            swap.flush();
          }
      } catch (IOException e) {
          e.printStackTrace();
        }
    while (!cmd_uscita.contains(cmd));
    try {
      swap.close();
    } catch (IOException e) {}
  }
}


syntax highlighted by Code2HTML, v. 0.8.11