package eu.dnetlib.data.hadoop.hbase;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import eu.dnetlib.data.hadoop.HadoopClientMap;
import eu.dnetlib.data.hadoop.HadoopServiceCore;
import eu.dnetlib.data.hadoop.config.ConfigurationEnumerator;
import eu.dnetlib.data.hadoop.config.ConfigurationFactory;
import eu.dnetlib.data.hadoop.oozie.OozieClientFactory;
import eu.dnetlib.data.mapreduce.JobClientFactory;

@Configuration
@Profile(value = "test")
public class HBaseTestContextConfiguration {

	public static final String ENABLED_CLIENTS = "{"
			+ "\"DM\":{\"oozie\":\"false\",\"mapred\":\"false\",\"hbase\":\"true\"},"
			+ "\"IIS\":{\"oozie\":\"false\",\"mapred\":\"false\",\"hbase\":\"false\"}"
			+ "}";

	public static final int MAX_VERSIONS = 10;

	@Bean
	public HadoopServiceCore hadoopServiceCore() {
		final HadoopServiceCore core = new HadoopServiceCore();

		core.setMaxVersions(MAX_VERSIONS);

		System.out.println("using hbase max versions: " + MAX_VERSIONS);
		return core;
	}

	@Bean(initMethod = "init")
	public HadoopClientMap hadoopClientMap() throws InterruptedException {
		final HadoopClientMap clientMap = new HadoopClientMap();
		clientMap.setEnabledClients(ENABLED_CLIENTS);
		clientMap.setClientsInitTime(10);

		return clientMap;
	}

	@Bean
	public HBaseAdminFactory hBaseAdminFactory() {
		return new HBaseAdminFactory();
	}

	@Bean
	public OozieClientFactory oozieClientFactory() {
		return new OozieClientFactory();
	}

	@Bean
	public JobClientFactory jobClientFactory() {
		return new JobClientFactory();
	}

	@Bean
	public ConfigurationEnumerator configurationEnumerator() {
		return new ConfigurationEnumerator();
	}

	@Bean
	public ConfigurationFactory DM() {
		return get(new ClassPathResource("/eu/dnetlib/data/hadoop/config/hadoop-default.dm.cnr.properties"));
	}

	@Bean
	public ConfigurationFactory IIS() {
		return get(new ClassPathResource("/eu/dnetlib/data/hadoop/config/hadoop-default.iis.icm.properties"));
	}

	protected ConfigurationFactory get(final Resource props) {
		final ConfigurationFactory configurationFactory = new ConfigurationFactory();
		configurationFactory.setDefaults(props);
		return configurationFactory;
	}

}
