/* 
* 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 gestor;

import gestor.utiles.Global;
import gestor.utiles.ConfiguracionBase;
import java.io.File;

public class Configuracion extends ConfiguracionBase {

    private static Configuracion _yo = null;

    public static Configuracion instanciaUnica() {
        if (_yo == null) {
            _yo = new Configuracion();
        }
        return _yo;
    }

    public String centro;
    public String codigoCentro;
    public String nombreServidor;
    public String ipServidor;
    public int puertoIpServidor;
    public String ipServidorSec;
    public int puertoIpServidorSec;
    public String codigoGestor;
    public String impresora;
    public byte[] codigosCorteTicket;

    public long margenRetraso;
    public long margenPenalizacion;
    public int tiempoAvisoSiguiente;
    public boolean imprimirTicket;
    public boolean gestorPrincipal;
    public float margenTicketSuperior;
    public float margenTicketInferior;
    public float margenTicketIzquierdo;
    public float margenTicketDerecho;
    public float anchoTicket;
    public float altoTicket;
    public String textoAgenciaTributaria;
    public String textoCortoAgenciaTributaria;
    public String textoSalaEspera;
    public boolean ActivarLogSocket = false;
    public boolean imprimirHoraCita = true;
    public boolean imprimirHoraTicket = false;
    public String textoHoraCita = "Hora cita: ";
    public String textoHoraTicket = "Hora emisión tique: ";
    public boolean usandoUDP = false;
    public String SalasValidas = "";
    public String iconoImpresion = "";
    public boolean imprimirLogo = false;
    public boolean permitirNoIden = true;

    public java.util.ArrayList<ScriptCandidato> scriptsCandidato = new java.util.ArrayList<>();

    private Configuracion() {
        super();
    }

    public boolean cargar() {
        super.cargar("ConfiguracionGestor.ini");
        nombreServidor = valor("nombreServidor", "");
        if (!nombreServidor.equals("")) {
            usandoUDP = true;
        }
        ipServidor = valor("IpServidor", "0.0.0.0");
        puertoIpServidor = valor("IpPort", 5000);
        ipServidorSec = valor("IpServidorSec", "");
        if (ipServidorSec.equals("")) {
            ipServidorSec = ipServidor;
        }
        puertoIpServidorSec = valor("IpPortSec", 0);
        if (puertoIpServidorSec == 0) {
            puertoIpServidorSec = puertoIpServidor;
        }

        centro = valor("centro", "AGENCIA TRIBUTARIA");
        codigoCentro = valor("codigoCentro", "");
        impresora = valor("impresora", "");
        tiempoAvisoSiguiente = valor("tiempoAvisoSiguiente", 3) * 1000;
        imprimirTicket = valor("imprimirTicket", false);
        gestorPrincipal = valor("gestorPrincipal", false);
        String codigoCorte = valor("codigosCorte", "");
        preparaCorte(codigoCorte);
        margenTicketSuperior = valor("MargenTicketsuperior", 5f);
        margenTicketInferior = valor("MargenTicketInferior", 0f);
        margenTicketIzquierdo = valor("MargenTicketIzquierdo", 5f);
        margenTicketDerecho = valor("MargenTicketDerecho", 5f);
        anchoTicket = valor("AnchoTicket", 65f);
        altoTicket = valor("AltoTicket", 65f);
        textoAgenciaTributaria = valor("Titulo", "Dirección General de Ingresos");
        textoCortoAgenciaTributaria = valor("TituloCorto", "DGI");
        textoSalaEspera = valor("TextoSalaDeEspera", "Sala de espera:");

        imprimirHoraCita = valor("ImprimirHoraCita", imprimirHoraCita);
        imprimirHoraTicket = valor("ImprimirHoraTicket", imprimirHoraTicket);
        textoHoraCita = valor("TextoHoraCita", textoHoraCita);
        textoHoraTicket = valor("TextoHoraTique", textoHoraTicket);
        SalasValidas = valor("salasValidas", "Vacio");
        for (Dato d : data) {
            String clave = d.clave.toLowerCase();
            if (clave.startsWith("script")) {
                String v = d.valor;
                String[] p = Global.split(v, ';');
                ScriptCandidato sc = new ScriptCandidato(p[1], p[0]);
                if (p.length > 2) {
                    sc.argumentos = p[2];
                }
                scriptsCandidato.add(sc);
            }
        }
        iconoImpresion = valor("iconoImpresion", "");
        String curDir = System.getProperty("user.dir");
        iconoImpresion = existeFichero(iconoImpresion, curDir);
        imprimirLogo = valor("imprimirLogo", false);

        return true;
    }

    public String existeFichero(String fichero, String curdir) {
        if (fichero.length() <= 4) {
            return "";
        }
        fichero = curdir + "\\" + fichero;
        boolean exists = (new File(fichero)).exists();
        if (exists == false) {
            return "";
        } else {
            return fichero;
        }

    }

    void preparaCorte(String codigoCorte) {
        if (codigoCorte.equals("")) {
            codigosCorteTicket = null;
            return;
        }
        String[] cods = Global.split(codigoCorte, ',');
        codigosCorteTicket = new byte[cods.length];
        for (int i = 0; i < cods.length; i++) {
            codigosCorteTicket[i] = Byte.parseByte(cods[i]);
        }
    }

    @Override
    public boolean guardar() {
        ponValor("impresora", impresora);
        return super.guardar();
    }

    public class ScriptCandidato {

        public String path;
        public String menuTxt;
        public String argumentos = null;

        public ScriptCandidato(String p, String m) {
            path = p;
            menuTxt = m;
        }
    }
}
