package eu.dnetlib.functionality.lightui.browse;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Required;

import com.google.common.collect.Lists;

import eu.dnetlib.data.index.IndexServiceException;
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpDocumentNotFoundException;
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
import eu.dnetlib.functionality.lightui.utils.AbstractQuerable;
import eu.dnetlib.functionality.lightui.utils.BrowseCollection;

public class DefaultBrowseCollection extends AbstractQuerable implements BrowseCollection {

	private String browseField;
	private String browseMDFormat;
	
	@Resource
	private BrowseStatsEngine browseStatsEngine;
	
	@Override
	public String getQuery() throws ISLookUpDocumentNotFoundException, ISLookUpException {
		return "";
	}

	@Override
	public Set<BrowseValue> getValues() throws ISLookUpException, IndexServiceException {
	
		Set<BrowseValue> res = new HashSet<BrowseValue>();

		for (BrowseCategory bc : browseStatsEngine.getBrowseStats("textual", browseMDFormat, Lists.newArrayList(browseField))) {
			res.addAll(bc.getValues());
		}
	
		return res;
	}
	
	@Override
	public List<String> getStringValues() throws ISLookUpException, IndexServiceException {
		List<String> list = new ArrayList<String>();
				
		for (BrowseValue bv : getValues()) {
			list.add(bv.getName());
		}
		
		Collections.sort(list);
		
		return list;
	}

	@Required
	public void setBrowseField(String browseField) {
		this.browseField = browseField;
	}

	@Override
	public String getBrowseField() {
		return browseField;
	}

	@Required
	public void setBrowseMDFormat(String browseMDFormat) {
		this.browseMDFormat = browseMDFormat;
	}

	public String getBrowseMDFormat() {
		return browseMDFormat;
	}

}
