import java.io.IOException;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;

public class NxtMidlet extends MIDlet implements CommandListener {

    private static Command exitCommand = new Command("Exit", Command.ITEM, 10);
    private static Command exitComm2 = new Command("Exit", Command.ITEM, 10);
    private static Command connectCommand = new Command("Connect", Command.BACK, 10);
     //private static Command connectCommand = new Command("Connect", Command.BACK, 10);
    
    
    public static Display pantalla;
    
    static Form mainForm;
    static Form secondForm;
    static Form winForm;
    static List menuDisp;
    static int select;

    private NxtBrick nxtBrick;

    public class Logger {

       NxtMidlet owner;

       public Logger(NxtMidlet aOwner) {
          owner = aOwner;
       }

       public void line( String s ) {
          owner.mainForm.append( s + "\n" );
       }
    }

    private Logger logger;

    public NxtMidlet() {

        logger = new Logger(this);

        mainForm = new Form("Blue Control NXT");
        try {
            mainForm.append(Image.createImage("/bluecontrol2.jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        mainForm.addCommand(exitCommand);
        mainForm.addCommand(connectCommand);

        mainForm.setCommandListener(this);
        winForm=new Form("Ventana de Comandos");
        
        menuDisp = new List("Menú",List.IMPLICIT);
        menuDisp.setTicker(new Ticker("Escoja un dispositivo Bluetooth."));
        menuDisp.addCommand(exitCommand);
        menuDisp.setCommandListener(this);

        nxtBrick = new NxtBrick(logger);

        logger.line( "Controlador de Dispositivos NXT" );
        logger.line( "Use menú inferior para acciones de conexión." );
    }
    
    protected void startApp() {
        pantalla=Display.getDisplay(this);
        pantalla.setCurrent(mainForm);
    }
    
    public void commandAction(Command c, Displayable s) {
	if (c == exitCommand) {
	    destroyApp(false);
	    notifyDestroyed();
	}
        if (c == exitComm2) {
	    destroyApp(false);
	    notifyDestroyed();
	}
        
        if (c == menuDisp.SELECT_COMMAND){ // Si selecciono
             int sizeList=menuDisp.size();
            switch(menuDisp.getSelectedIndex()){ //opcion del menu
                              
            case 0:{
                    select=((sizeList-1)-menuDisp.getSelectedIndex());// se insertan al revès!!
                                                                      //Por eso la conversión!!
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                   
                    break;
                    }
            case 1:{
                    //logger.line( "Index seleccionado: 1" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;  
                    pantalla.setCurrent(mainForm);
                   
                    break;
                    }
            case 2:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
             case 3:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 4:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 5:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 6:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 7:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
                  
              case 8:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 9:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 10:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 11:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 12:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 13:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 14:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 15:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 16:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
             case 17:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 18:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
              case 19:{
                    //logger.line( "Index seleccionado: 2" );
                    select=((sizeList-1)-menuDisp.getSelectedIndex());
                    menuDisp.deleteAll();
                    NxtBluetooth.semmutex=1;
                    pantalla.setCurrent(mainForm);
                    
                    break;
                    }
            }
        }
	if (c == connectCommand) {

           mainForm.removeCommand(connectCommand);

           mainForm.deleteAll();

           final Display d = Display.getDisplay(this);
          

	   Thread connector = new Thread() {
	      public void run() {
                 try {
                    logger.line( "Conectando..." );
                    nxtBrick.connect();
                    logger.line( "Conectado" );
                    NxtCanvas canvas=new NxtCanvas(nxtBrick);
                    
                    d.setCurrent(canvas);
    
                 } catch( Exception e ) {
                    logger.line( e.getMessage() );
                    logger.line( "Intente nuevamente." );
                    mainForm.addCommand(connectCommand);
                 }
              }
           };

           connector.start();
        }
    }
    
    protected void destroyApp(boolean unconditional) {
    }
    
    protected void pauseApp() {
    }
    
    
    
  
}
