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

import javax.swing.JOptionPane;
import javax.swing.JTextField;

import servidor.datos.BaseDatos;
import servidor.datos.TablaConfiSer;
import servidor.utiles.ConfiguracionBase;

public class Configuracion  extends ConfiguracionBase {
	public int ipPort;
	public String nombreoficina;
    //public String centro;
    public String codigoCentro;
    public int servidor;
    public int tiempoBucle;
    public int margenRetraso;
    public int tiempoPenalizacion;

    //public boolean imprimirTicket;
    public int retrasoTicket;
    public boolean apagarOperadoresFantasma;
    public boolean modoSinGestor = false;

    public int colasSimultaneas = 1;
    public boolean comprobarMonitores = true;
    public boolean gestionHuecosActivada = true;
    public String servidorSql = null;
    public boolean permitirNoiden=false;
    public String horaRecepcionh ;
    public String horaRecepcionm ;
    public String horaEnvioh ;
    public String horaEnviom ;
    //public Date  fechaInicio;
    //public Date  fechaFinal;
  
    public String URLActualizacion = null;
    public boolean EstimarRetrasos=false;
    public String horaturnotardeh;
    public String horaturnotardem;

    public String ColaAutoenvio;
    public boolean ContestarResumenColasOpe=false;

    
    
    TablaConfiSer tbcs;
    public String BaseDatos = "ateneo";
  //  public boolean permitirNoiden=false;

    

    
    
    protected static Configuracion yo = null;
    public static Configuracion getConfiguracion() {
        if(yo == null) {
            yo = new Configuracion();
        }
        return yo;
    }
    
    protected Configuracion() {
        super();
    }
    
    
    
    public void setTablaConfiguracion(TablaConfiSer tbcpar){
    	String strServidor;
    	tbcs=tbcpar;
    	strServidor=tbcs.getParametros().get("servidor");
    	if (strServidor==null){
    		strServidor=JOptionPane.showInputDialog(null,"ATENCION \n" +
    				"No se ha podido obtener el identificador del servidor en la BD Ateneo.\n" +
    				"Ello es necesario para diferenciar las transmisiones de datos  cuando \n" +
    				"hay mas de un servidor con el mismo codigo de oficina.\n" +
    				"Si se trata del primer servidor  en la oficina identificar con un '1'.\n" +
    				"Las posteriores instalaciones, en orden '2','3'...\n" +
    				"Servidores de prueba y formacion (no transmiten): '0'.\n" +
    				"Este identificador podra ser modificado posteriormente.\n" +
    				"\n\nIntroduzca el Nº de Servidor para la bd. actual","ATENEO",JOptionPane.INFORMATION_MESSAGE);
    		if (!numServidorvalido(strServidor)){
	    		JOptionPane.showMessageDialog(null, "Nº de servidor erroneo.\nIntentalo de nuevo.","ATENEO",JOptionPane.ERROR_MESSAGE);
	    		System.exit(-1);
	    	}
	    	else
	    	{
	    		tbcs.creaParametro("servidor", strServidor);
	    		tbcs.salvarTabla();
	    		tbcs.cargarTabla();
	    	}
    	}	
    	
    	servidor= Integer.parseInt(strServidor.toString());
    	
    }
    
    
    public boolean cargar(String nombreFichero) {
    	String auxhora;
        super.cargar(nombreFichero);
        ipPort = valor("IpPort", 5000);
        //centro = valor("centro", "Agencia Tributaria");
        nombreoficina=valor("nombreoficina","Nombre Oficina");
        codigoCentro = valor("codigoCentro", "");
        tiempoBucle = valor("tiempoBucle", 10);
        margenRetraso = valor("margenRetraso", 10);
        tiempoPenalizacion = valor("tiempoPenalizacion", 15);

        //imprimirTicket = valor("imprimirTicket", false);
        apagarOperadoresFantasma = valor("desconectarClientes", true);
        modoSinGestor = !valor("recepcionista", true);

        servidorSql = valor("servidorSql", "localhost");
       	permitirNoiden =valor("permitirNoiden",true);
     
         
        auxhora= valor("HoraEjecucionRecepcion","07:15:00");
        horaRecepcionh=ponceros(auxhora.split(":")[0],2);
        horaRecepcionm=ponceros(auxhora.split(":")[1],2);
        
        auxhora= valor("HoraEjecucionEnvio","21:30:00");
        horaEnvioh=ponceros(auxhora.split(":")[0],2);
        horaEnviom=ponceros(auxhora.split(":")[1],2);
        
        auxhora= valor("HoraTurnoTarde","15:30:00");
        horaturnotardeh=ponceros(auxhora.split(":")[0],2);
        horaturnotardem=ponceros(auxhora.split(":")[1],2);        
        
//System.out.println( horaEnvioh+":"+ horaEnviom);       
       // fechaInicio = valor("FechaInicialTransmisiones",new Date());
       // fechaFinal = valor("FechaFinalTransmisiones", new Date());
        retrasoTicket = valor("retrasoTicket", 30);
        
//	  if(modoArranque.toLowerCase().startsWith("auto")) {
//		 servidor.utiles.Global.modoAutomatico = true;
//	  }
        colasSimultaneas = valor("colasSimultaneas", 1);
        comprobarMonitores = valor("comprobarMonitores", true);
        gestionHuecosActivada=valor("gestionHuecosActivada", true);
      //  pathBackupDatos = valor("PathBackup","");
        EstimarRetrasos=valor("EstimarRetrasos",false);
        URLActualizacion=valor("URLActualizacion","");
        
        BaseDatos = valor("BaseDatos","ateneo");
        ColaAutoenvio=valor("ColaAutoenvio","");
        ContestarResumenColasOpe=valor("ContestarResumenColasOpe",true);
        
        
        return true;
    }
    

	   public boolean salva(String nombreFichero) {
		ponValor("IpPort",String.valueOf(this.ipPort));
		ponValor("nombreoficina",String.valueOf(this.nombreoficina));
		ponValor("codigoCentro",this.codigoCentro);
		ponValor("tiempoBucle",String.valueOf(this.tiempoBucle));
		ponValor("margenRetraso",String.valueOf(this.margenRetraso));
		ponValor("tiempoPenalizacion",String.valueOf(this.tiempoPenalizacion));
		
		ponValor("desconectarClientes",(this.apagarOperadoresFantasma?"si":"no"));
		ponValor("recepcionista",(this.modoSinGestor?"no":"si"));

		
		//ponValor("FechaFinalTransmisiones", this.fechaFinal);
		//ponValor("FechaInicialTransmisiones", this.fechaInicio);
		ponValor( "retrasoTicket",String.valueOf(this.retrasoTicket));
		ponValor("comprobarMonitores",(this.comprobarMonitores?"si":"no"));
		ponValor("gestionHuecosActivada",(this.gestionHuecosActivada?"si":"no"));
		ponValor("HoraEjecucionEnvio",ponceros(this.horaEnvioh,2)+":"+ponceros(this.horaEnviom,2)+":"+"00");
		ponValor("HoraEjecucionRecepcion",ponceros(this.horaRecepcionh,2)+":"+ponceros(this.horaRecepcionm,2)+":"+"00");
		ponValor("HoraTurnoTarde",ponceros(this.horaturnotardeh,2)+":"+ponceros(this.horaturnotardem,2)+":"+"00");
		ponValor("colasSimultaneas",String.valueOf(this.colasSimultaneas));
		ponValor("BaseDatos",this.BaseDatos);
		ponValor("EstimarRetrasos",(this.EstimarRetrasos?"si":"no"));
		//ponValor("URLActualizacion",this.URLActualizacion);
		ponValor("servidorSql",this.servidorSql );
		ponValor("permitirNoiden",(this.permitirNoiden?"si":"no"));

                ponValor("ColaAutoenvio",String.valueOf(this.ColaAutoenvio));
		ponValor("autoenviocolacero",(this.ColaAutoenvio!=""?"si":"no"));
                ponValor("ContestarResumenColasOpe",(this.ContestarResumenColasOpe?"si":"no"));
		super.guardar();
		tbcs.getParametros().put("servidor", String.valueOf(servidor));
		tbcs.salvarTabla();
        return true;
	   } 
	   
	   public static String ponceros(String valor,int lonnum){
		   String salida="";int lon;
		   for (int i=1;i<=lonnum;i++){
			   salida=salida.concat("0");
		   }
		   salida=salida.concat(valor.trim());
		   salida=salida.substring(salida.length()-lonnum);
		   
		   return salida;
		   
	    	
	    }
	   boolean numServidorvalido(String strser){
		  int salida;
		  salida=enteroStr(strser,-1);
		  return (salida>-1 && salida<10);
	   }
	   int enteroStr(String cad, int valorsinull){
		   if(cad == null) return valorsinull;
			  try {
				 return Integer.parseInt(cad);
			  } catch(NumberFormatException exc) {
				 return valorsinull;
			  }
	   }
	   
}
	   
