package commons.ui;
import java.util.List;
import basics.utl.SysUtl;
import commons.application.CommandInterpreter;
import commons.application.ctx.Context;
public class Console implements UIController
{

private static final Console instance = new Console();

public static final Console instance ()
{
   return instance;
}
private boolean       quit       = false;
CommandInterpreter    interpreter;
@SuppressWarnings("unused")
private boolean       showStatus = false;
@SuppressWarnings("unused")
private boolean       showErrors = true;
private static String lastCtx    = "";
private static String lastMsg    = "";

public void registerCommandInterpreter (CommandInterpreter interpreter)
{
   this.interpreter = interpreter;
}

public void start (boolean batch)
{
   if (!batch)
      while (!exit())
         eval(getInput());
}

public void clearInput ()
{}

public void eval (String input)
{
   interpreter.process(input);
}

public String getInput ()
{
   String input = SysUtl.readln();
   input = input == null ? "" : input;
   if (input.equals("quit")) quit = true;
   return input;
}

// public void configInspectPanel(List<String> inspectFields)
// {
//		
// }
public void print (Context ctx)
{
   if (showStatus)
   {
      String msg = ctx.toString();
      if (msg.equals(lastCtx)) return;
      lastCtx = msg;
      SysUtl.println("[E.CTX>" + msg);
   }
}

public void print (String key, String msg)
{
   SysUtl.println("[E." + key + ">" + msg);
}

public void print (String msg)
{
   if (msg.equals(lastMsg)) return;
   lastMsg = msg;
   SysUtl.println("[E>" + msg);
}

public boolean exit ()
{
   return quit;
}

public List<String> getInspectedFields ()
{
   return null;
}

// public void setInspectedFields (List<String> inspectedFields)
// {
// }
//	
// public int createTablePane()
// {
// return 0;
// }
//	
// public void deleteTablePane(int index)
// {
//		
// }
//
// public void setTableModel(int index, TableModel model)
// {
//		
// }
//
// public int setNewTableModel(TableModel model)
// {
// return 0;
// }
public void cls ()
{}

// public void status(boolean show) {
// showStatus = show;
// }
// public void errors(boolean show) {
// showErrors = show;
// }
// public void addTextToTab(int number, String text){
//		
// }
//
// public int getTabCount()
// {
// return 1;
// }
/**
 * Notification comes when a context parameter has changed (set, unset, etc). This will refresh the
 * context parameters table.
 */
public void fireCtxHasChanged (Context ctx)
{
//   SysUtl.trace("Changed context.");
}
}
