package eu.dnetlib.functionality.index;

import static org.junit.Assert.*;

import java.net.MalformedURLException;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.junit.Before;
import org.junit.Test;

import eu.dnetlib.miscutils.datetime.HumanTime;

public class IndexTest {

	private String url;
	
	private SolrServer server;
	
	private final String id = "__indexrecordidentifier";
	
	@Before
	public void setUp() throws MalformedURLException {
		url = "http://node2.t.driver.research-infrastructures.eu:8280/is/mvc/index/DMF-index-driver/solr.do";
		server = new CommonsHttpSolrServer(url);
		assertNotNull(server);
	}
	
	@Test
	public void test_1() throws SolrServerException {
		SolrQuery query = new SolrQuery();
		
		query.setQuery("textual").setFields(id).setRows(1000);
		
		QueryResponse res = queryPOST(query);
		
		String f1 = new String();
		String f2 = new String();
		int i=0;
		for (SolrDocument d : res.getResults()) {
			if (i == 0) {
				f1 += id + ":\"" + d.getFieldValue(id) + "\" or ";
				f2 += id + ":\"" + d.getFieldValue(id) + "\" or ";
			}
			
			if (i++ < 500)
				f1 += id + ":\"" + d.getFieldValue(id) + "\" or ";
			else
				f2 += id + ":\"" + d.getFieldValue(id) + "\" or ";
		}
		
		f1 = f1.substring(0, f1.length() - 4);
		f2 = f2.substring(0, f2.length() - 4);
		
		query.setQuery("textual").setFilterQueries(f1, f2);
		
		res = queryPOST(query);
		System.out.println("num results: " + res.getResults().getNumFound());		
		
		assertNotNull(res);
	}
	
	@Test
	public void test_2() throws SolrServerException {

		SolrQuery query = new SolrQuery();
		
		query.setQuery("textual").setFilterQueries("creator:manghi or repositoryname:\"UK PubMed Central\"");
		
		QueryResponse res = queryPOST(query);
		
		System.out.println("num results: " + res.getResults().getNumFound());		
		
		assertNotNull(res);
	}
	
	
	private QueryResponse queryPOST(SolrQuery q) throws SolrServerException {
		long start = System.currentTimeMillis();
		QueryResponse query = server.query(q, METHOD.POST);
		System.out.println("qTime: " + HumanTime.exactly(System.currentTimeMillis() - start));
		
		return query;
	}

}
