package eu.dnetlib.resolver;

import java.io.IOException;

import eu.dnetlib.dli.collector.plugin.ScholixFromFSCollectorPlugin;
import eu.dnetlib.dli.resolver.*;
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
import eu.dnetlib.dli.resolver.model.serializer.DLIResolverSerializer;
import eu.dnetlib.resolver.mdstore.plugin.DLIMergeRecord;
import net.sf.ehcache.Cache;
import org.antlr.stringtemplate.StringTemplate;
import org.apache.commons.io.IOUtils;
import org.springframework.cache.ehcache.EhCacheFactoryBean;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConfigurationTestConfig {

	@Bean
	public UniqueServiceLocator serviceLocator() {
		return null;
	}



	@Bean
	public StringTemplate pmfSerializerTemplate() throws IOException {
		final String template = IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/templates/PMFXML.st"));
		final StringTemplate st = new StringTemplate(template);
		return st;
	}

	@Bean
	public StringTemplate dmfSerializerTemplate() throws IOException {
		final String template = IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/templates/DMFXML.st"));
		final StringTemplate st = new StringTemplate(template);
		return st;
	}

	@Bean
	public StringTemplate scholixSerializerTemplate() throws IOException {
		final String template = IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/templates/ScholixXML.st"));
		final StringTemplate st = new StringTemplate(template);
		return st;
	}

	@Bean
    public DLIResolverSerializer resolverSerializer() throws IOException {
        final DLIResolverSerializer serializer = new DLIResolverSerializer();
        serializer.setDmfTemplate(dmfSerializerTemplate());
		serializer.setPmfTemplate(pmfSerializerTemplate());
		serializer.setScholixTemplate(scholixSerializerTemplate());
		return serializer;
	}


	@Bean
    public ScholixFromFSCollectorPlugin collectorPlugin() {
	    return new ScholixFromFSCollectorPlugin();
    }



//	@Bean
//	public ANDSResolver andsResolver() {
//		final ANDSResolver resolver = new ANDSResolver();
//		resolver.setCache((Cache) ResolverCache().getObject());
//		resolver.setName("ANDSDataciteResolver");
//		return resolver;
//	}
//
//    @Bean
//    public ENAResolver enaResolver() {
//        final ENAResolver resolver = new ENAResolver();
//        resolver.setCache((Cache) ResolverCache().getObject());
//        resolver.setName("ENAResolver");
//        return resolver;
//    }
//
//	@Bean
//	public CrossrefResolver crossrefResolver() {
//		final CrossrefResolver resolver = new CrossrefResolver();
//		resolver.setCache((Cache) ResolverCache().getObject());
//		resolver.setName("CrossrefResolver");
//		return resolver;
//	}
//
//	@Bean
//	public CrossRefParserJSON crossRefParser() {
//		return new CrossRefParserJSON();
//	}
//
//	@Bean
//	public PubMedResolver pubMedResolver() {
//		final PubMedResolver resolver = new PubMedResolver();
//		resolver.setCache((Cache) ResolverCache().getObject());
//		resolver.setName("PubMedResolver");
//		return resolver;
//	}
//
//	@Bean
//	public DataciteResolver dataciteResolver() {
//		final DataciteResolver resolver = new DataciteResolver();
//		resolver.setCache((Cache) ResolverCache().getObject());
//		resolver.setName("DataciteResolver");
//		return resolver;
//	}
//
//	@Bean
//	public RCSBResolver rcsbResolver() {
//		final RCSBResolver resolver = new RCSBResolver();
//		resolver.setCache((Cache) ResolverCache().getObject());
//		resolver.setName("RCSBResolver");
//		return resolver;
//	}
//
//	@Bean
//	public RCSBParser rcsbParser() {
//		return new RCSBParser();
//	}
//
//	@Bean
//	public OpenaireResolver openaireResolver() {
//		final OpenaireResolver resolver = new OpenaireResolver();
//		resolver.setCache((Cache) ResolverCache().getObject());
//		resolver.setName("OpenaireResolver");
//		return resolver;
//	}
//
//	@Bean
//	public EhCacheManagerFactoryBean cacheFactory() {
//		EhCacheManagerFactoryBean cacheFactory = new EhCacheManagerFactoryBean();
//		cacheFactory.setCacheManagerName("DLItestCacheFactory");
//		return cacheFactory;
//	}
//
//	@Bean
//	public EhCacheFactoryBean ResolverCache() {
//		EhCacheFactoryBean doiCacheFactoryBean = new EhCacheFactoryBean();
//		doiCacheFactoryBean.setEternal(false);
//		doiCacheFactoryBean.setTimeToLive(0);
//		doiCacheFactoryBean.setTimeToIdle(36000);
//		doiCacheFactoryBean.setMaxEntriesLocalHeap(10000);
//		doiCacheFactoryBean.setMaxEntriesLocalDisk(20000);
//		doiCacheFactoryBean.setCacheManager(cacheFactory().getObject());
//		doiCacheFactoryBean.setCacheName("TestResolverCache");
//		return doiCacheFactoryBean;
//	}

}





