/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package monitor;

import cargador.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import monitor.utiles.*;

public class Main implements cargador.ILanzable {

    Ventana vnt;
    java.util.Timer iniciador;
    public Configuracion conf;
    public Parametros args;

    public Main() {
        conf = Configuracion.instanciaUnica();
        conf.cargar();
    }

    public static GraphicsConfiguration dobleMonitor() {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();
        return gs[gs.length - 1].getDefaultConfiguration();
    }

    public static void main(String args[]) {
        Main mf = new Main();
        mf.testYaIniciado();
        mf.args = new Parametros(args);
        // Apagar el servicio de mensajeria de windows
        if (!mf.args.contiene("desarrollo")) {
            try {
                Runtime.getRuntime().exec("net stop messenger");
            } catch (Exception exc) {
            }
        }
        if (!mf.args.contiene("ejecutarSinDescargar")) {
            cargador.Configuracion conf = new cargador.Configuracion();
            conf.fichero = "Monitor.jar";
            conf.tipoCliente = "3";
            if (mf.conf.usandoUDP) {
                conf.nombreServidor = mf.conf.nombreServidor;
                conf.usandoUDP = true;
            } else {
                conf.ipServidor = mf.conf.ipServidor;
                conf.ipServidorSec = mf.conf.ipServidorSec;
                conf.ipPortSec = mf.conf.ipPortSec;
            }
            conf.ipPort = mf.conf.ipPort;
            CargadorCliente cargador = new CargadorCliente(conf, mf);
            cargador.lanzar("");
        } else {
            mf.cargarAplicacion();
        }
    }

    void testYaIniciado() {
        InstanciaUnica iu = new InstanciaUnica("MonitorAteneo");
        if (iu.isAppActive()) {
            System.exit(1);
        }
    }

    void cargarAplicacion() {
        iniciador = new Timer();
        iniciador.schedule(new TimerTask() {

            @Override
            public void run() {
                iniciarVentana();
            }
        }, 100L);
    }

    public void reiniciarConScript(String msg) {
        try {
            File file = new File("arrancar.vbs");
            PrintStream salida = new PrintStream(new FileOutputStream(file, false));
            if (msg.equals("ENCENDIDO_INMEDIATO")) {
                salida.println("WScript.sleep 3000");
            } else {
                salida.println("WScript.sleep 300000");
            }
            salida.println("set shell = wscript.CreateObject(\"wscript.Shell\")");
            salida.println("Set fso = CreateObject(\"Scripting.FileSystemObject\")");
            salida.println("shell.Exec \"" + Configuracion.ficheroEjecucion + "\"");
            salida.println("fso.DeleteFile \"arrancar.vbs\"");
            salida.close();
            Runtime.getRuntime().exec("CSCRIPT arrancar.vbs");
            System.exit(0);
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    }

    void iniciarVentana() {
        GraphicsConfiguration gc = Main.dobleMonitor();
        vnt = new Ventana(gc);
        vnt.ajustar(gc);
        vnt.iniciar();
    }

    @Override
    public void lanzaCliente() {
        cargarAplicacion();
    }
}
