/**
 *
 * <p>Titulo: Servidor de respuestas a preguntas</p>
 * <p>Descripcion: Este programa permite generar una pregunta
 * y recepcionar las respuestas a esta.
 * </p>
 * @author Diego Gonzalez Barrientos
 * @version 1.0
 */
//Paquetes requeridos por el programa
import java.io.*;
import javax.bluetooth.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

/**Clase principal del programa para el celular, que permite responder preguntas formuladas
*/
public class SPP_MIDlet extends MIDlet implements CommandListener
{
/**Constructor del MIDlet*/
  public SPP_MIDlet()
  {
    instance = this;
  }

  /**
   * Implementa ciclo de vida del MIDlet
   */
  public void startApp()
  {
    display = Display.getDisplay(this);
    bluelet = new AdministradorBluetooth( this, this );
    bluelet.startApp();
    spp_client = new SPP_Cliente();
    spp_screen = new SPP_Pantalla();
    display.setCurrent( spp_screen );
  }

  /**
   * Implementa ciclo de vida del MIDlet
   */
  public void pauseApp()
  {
    bluelet.pauseApp();
  }

  /**
   * Implementa ciclo de vida del MIDlet
   */
  public void destroyApp(boolean unconditional)
  {
    bluelet.destroyApp( unconditional );
  }

  /**
   * Saliendo del MIDlet
   */
  public static void quitApp()
  {
    instance.destroyApp(true);
    instance.notifyDestroyed();
    instance = null;
  }



  /**
   * Maneja acciones y entradas de usuario.
   * Todos los comandos GUI son diregidos a esta funcion.
   * @param c
   * @param d
   */
  public void commandAction(Command c, Displayable d)
  {
    if ( c.equals( AdministradorBluetooth.COMPLETED ) )
    {
	  bluelet.showUI();
	  display.setCurrent(bluelet.getServiceUI());
    }
	 else if (c.equals(AdministradorBluetooth.SELECTEDALTERNATIVE)) {	 
	 		spp_client.sendChoosenAlternative(bluelet.getSelectedAlternative());
			display.setCurrent(spp_screen);
	 }
	  else if ( c.equals( AdministradorBluetooth.SELECTEDSERVICE ) )
    {
     display.setCurrent( spp_screen );  
	  Thread t = new Thread(  new WTK22beta2Patch() );
     t.start();
    } else if ( c.equals( AdministradorBluetooth.SELECTED ) )
    {
      display.setCurrent( spp_screen );
    } else if ( d == spp_screen && c.getLabel().equals("Correr Cliente") )
    {
      bluelet.startInquiry( DiscoveryAgent.GIAC, new UUID[]{ AdministradorBluetooth.uuid } );
      display.setCurrent( bluelet.getUI() );

    } else if ( c.equals( AdministradorBluetooth.BACK ) )
    {
      display.setCurrent( spp_screen );
    } else if (d == spp_screen && c.getLabel().equals("Salir"))
    {
        quitApp();
    }
  }


  /**
   * Permite imprimir mensaje de debugeo
   * @param s String
   */
  public static void log(String s)
  {
    System.out.println(s);
    SPP_MIDlet.instance.spp_screen.add(s);
  }

  /**
   * Utilidad que muestra mensaje de excepcion.
   * @param e
   * @param next_screen
   */
  public static void alert( Exception e, Displayable next_screen )
  {
    Alert alert = new Alert( "Cliente de preguntas", "Exception: "+e.getClass().getName()+" "+e.getMessage(), null, AlertType.INFO );
    alert.setTimeout( Alert.FOREVER );
    display.setCurrent( alert, next_screen );

  }

  /**
   * Utilidad que muestra mensaje de alerta.
   *
   * @param m String
   * @param next_screen Screen
   */
  public static void alert( String m, Displayable next_screen )
  {
    Alert alert = new Alert( "Benhui.net", m, null, AlertType.INFO );
    alert.setTimeout( Alert.FOREVER );
    display.setCurrent( alert, next_screen );

  }

  public class WTK22beta2Patch implements Runnable
  {
    public void run()
    {
      spp_client.receiveSPPMessage( bluelet.getSelectedService(), "Sample Test Message");
		raUI = bluelet.getRemoteAlternativeUI();
		raUI.showui();
		display.setCurrent(raUI);

    }
  }

/**Referencia al MIDlet
*/
  public static SPP_MIDlet instance;
/**Referencia a la pantalla
*/
  public static Display display;

  /** Componente de la pantalla
  */
  public SPP_Pantalla spp_screen = null;

  /** Referencia a objeto que descubre dispositivos y servicios
  */
  AdministradorBluetooth bluelet = null;

  /** Referencia a objeto cliente
  */
  SPP_Cliente spp_client  = null;
  /**Pantalla de pregunta seleccionado
  */
  AlternativaRemotaUI raUI = null;
}
