package com.ejie.ab39a.procesos;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.GenericApplicationContext;

import com.ejie.ab39a.context.DataBaseInfo;
import com.ejie.ab39a.util.Constantes;

public class ProcAmaiera {
	
	private static final Logger logger = LoggerFactory.getLogger(ProcAmaiera.class);
	
	/**
	 * 
	 * @param args String[]
	 */
	public static void main(String[] args){
		ProcAmaiera.logger.debug("Entarando en main");
		
		for(int i = 0; i < args.length; i++) {
			ProcAmaiera.logger.debug(("args prueba SH= ").concat(Integer.valueOf(i).toString()).concat(" tiene valor = ").concat(args[i]));
        }
		
		//Se recogen los argumentos de la cadena de conexion, necesarios para construir un objeto DataBaseInfo
				String[] bbddArgs = {args[0],args[1],args[2]};
				
				DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
				BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(DataBaseInfo.class);
				for(String argConst:bbddArgs){
					beanDefinitionBuilder.addConstructorArgValue(argConst);
				}
				
				beanFactory.registerBeanDefinition("dataBaseInfo", beanDefinitionBuilder.getBeanDefinition());
				GenericApplicationContext genericApplicationContext = new GenericApplicationContext(beanFactory);
				genericApplicationContext.refresh();
				ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"classpath*:/ab39a/launch-context.xml" }, genericApplicationContext);
				
				
				ProcAmaiera.logger.debug("Fin context establecido"); 

				
				BeanFactory factory = context.getAutowireCapableBeanFactory();
				ProcAmaiera.logger.info("ProcAmaiera creacion de contexto de spring");	
				
				ProcesoAmaiera procesoAmaiera = (ProcesoAmaiera) factory.getBean("procesoAmaiera");
			
				ProcAmaiera.logger.info("ProcAmaiera creacion de clase ProcesoAmaiera");		
				
				try {
					procesoAmaiera.ejecutarProcesoAmaiera(factory);
					System.exit(Constantes.PROCESO_OK);
				} catch (Exception e) {
					ProcAmaiera.logger.error("Se ha producido un error en el proceso ProcAmaiera:ERROR:",e);
					ProcAmaiera.logger.info("Se ha producido un error en el proceso ProcAmaiera:ERROR:".concat(e.getMessage()));
					System.exit(Constantes.PROCESO_NOK);
					
				}
		ProcAmaiera.logger.debug("Saliendo main");
	}

}
	