package com.ejie.ad74a.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.stereotype.Component;
import org.springframework.util.PropertyPlaceholderHelper;

/**
 * Clase para recuperar valores de propiedades
 * 
 * @author GFI
 * 
 */
@SuppressWarnings("deprecation")
@Component(value = "applicationProperties")
public class UtilProperties extends PropertyPlaceholderConfigurer {
    /**
     * Enumerado con las propiedades definidas en el fichero '.properties' de la aplicacion.
     * 
     * @author JBHG
     *
     */
    public enum Props {
    	
    	//LIMIT TRATAMIENTO SOLICITANTES para pruebas 0 sin limite
    	BATCH_LIMIT("batch.process.limit"),
    	
        // Simulacion
        EN_OFICINA("en_oficina"), 
        EN_OFICINA_TOKEN("en_oficina.token"), 
        EN_OFICINA_JDBCURL("en_oficina.jdbcURL"), 
        EN_OFICINA_PIF_API_COMMAND("en_oficina.pif.api.command"),
        
        PRUEBA_HUMO("prueba.humo"),
        
        // Parametros para la BD
    	EJIE_JDBC_URL("ejie.jdbc.url"), 
        BATCH_JDBC_DRIVER("batch.jdbc.driver"),
        
        // Codigo aplicacion
        APP_CODE("app.code"),
        
        //URL Regalador de tokens de XLNETs (backend)
        N38_TOKEN_URL("n38.token.url"),
        
        //Log
        LOG_PATH("log.level.salidaEstandar"),
        
        //Spring context
        SPRING_CONTEXT("path.spring-context"),
        
        // Carpetas y ficheros
        PATH_TMP("path.tmp"),
        PATH_TEMPLATE_EXCEL_COPAGOS_AYTO("path.template.excel.copagos.ayto"),

        // Datos procesamiento
        USER_PROCESS("user.process"),
        BATCH_SIZE("batch.process.size"),
        
        // URL WS LIQUICACIONES
      //ENTORNO
    	URL_WS_LIQUIDACIONES("url.ws.liquidaciones"),
        
        //*****************************
        
        COPAGO_AYTOS_INFOR_DIRECCION("copago.aytos.informe.direccion"),
        COPAGO_AYTOS_INFOR_RESIDENTES("copago.aytos.informe.residentes"),
        COPAGO_AYTOS_INFOR_DNI("copago.aytos.informe.dni"),
        COPAGO_AYTOS_INFOR_PERIODO("copago.aytos.informe.perido"),
        COPAGO_AYTOS_INFOR_MESES("copago.aytos.informe.meses"),
        COPAGO_AYTOS_INFOR_DIAS("copago.aytos.informe.dias"),
        COPAGO_AYTOS_INFOR_PRECIO("copago.aytos.informe.precio"),
        COPAGO_AYTOS_INFOR_TOTAL("copago.aytos.informe.total"),
        COPAGO_AYTOS_INFOR_CANTIDAD("copago.aytos.informe.cantidad"),
        COPAGO_AYTOS_INFOR_CONCEPTO("copago.aytos.informe.concepto"),
        COPAGO_AYTOS_INFOR_CONCEPTO_VAL("copago.aytos.informe.concepto.valor"),
        
        
        RUTA_DFA_ENVIO("ruta.dfa.envio"),
        RUTA_DFB_ENVIO("ruta.dfb.envio"),
        RUTA_DFG_ENVIO("ruta.dfg.envio"),
        RUTA_DFA_PIF("ruta.dfa.pif"),
        RUTA_DFB_PIF("ruta.dfb.pif"),
        RUTA_DFG_PIF("ruta.dfg.pif"),
        /** Atributo del fichero de propiedades: PIF API command */
    	PIF_API_COMMAND("pif.api.command"),
    	LOGIN_PIF("login.pif"),
    	LOGIN_PIF_AD74A("login.pif.ad74a"),
    	
    	/** Atributo interoperabilidad */
    	RUTA_NISAE_ENVIO ("ruta.nisae.envio"),
    	RUTA_NISAE_RESPUESTA ("ruta.nisae.respuesta"),
    	RUTA_NISAE_FILE ("ruta.nisae.file"),
    	RUTA_TEMP ("ruta.temp"),
    	RUTA_NISAE_FILE_ENVIADOS ("ruta.nisae.file.enviados"),
    	RUTA_NISAE_FILE_RECIBIDOS ("ruta.nisae.file.recibidos"),
    	RUTA_NISAE_FILE_PROCESADOS ("ruta.nisae.file.procesados")
        ;
        private static Map<String, String> propertiesMap = new HashMap<>();
        private String name;

        /**
         * Constructor del enumerado
         * 
         * @param name
         *            String
         */
        private Props(String name) {
            this.name = name;
        }

        /**
         * Obtiene el valor de la propiedad
         * 
         * @return
         */
        public String val() {
            return propertiesMap.get(name);
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @see org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#
     * processProperties(org.springframework.beans.factory.config. ConfigurableListableBeanFactory,
     * java.util.Properties)
     */
    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, final Properties props) {

        super.processProperties(beanFactory, props);
        final PropertyPlaceholderHelper.PlaceholderResolver resolver = new PropertyPlaceholderHelper.PlaceholderResolver() {
            @Override
            public String resolvePlaceholder(final String key) {
                return props.getProperty(key);
            }
        };
        final PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper(DEFAULT_PLACEHOLDER_PREFIX,
                DEFAULT_PLACEHOLDER_SUFFIX, DEFAULT_VALUE_SEPARATOR, true);
        for (final Object key : props.keySet()) {
            Props.propertiesMap.put((String) key,
                    helper.replacePlaceholders(props.getProperty((String) key), resolver));
        }
    }

}