package gr.uoa.di.webui.search;

import java.util.Collections;
import java.util.Map;

import org.apache.log4j.Logger;

import eu.dnetlib.domain.data.BrowseData;
import eu.dnetlib.domain.enabling.Vocabulary;

public class BrowseDataReader {

	private Map<String, Vocabulary> vocabularyMap;
	private LayoutManager layoutManager;

	public static Logger logger = Logger.getLogger(BrowseDataReader.class);

	public BrowseDataReader(Map<String, Vocabulary> vocabularyMap,
			LayoutManager layoutManager) {
		this.vocabularyMap = vocabularyMap;
		this.layoutManager = layoutManager;
	}

	public BrowseData read(BrowseData browseData, boolean alphabetical) {
		BrowseData newBrowseData = new BrowseData();
		
		for (String field : browseData.getFields()) {
	
			Vocabulary vocabulary = vocabularyMap.get(layoutManager
					.getWebLayoutManager().getIndexMap().get(field)
					.getVocabulary());

			if (vocabulary != null) {
				int i = 0;
				for (String value : browseData.getFieldValues(field)) {
					if(browseData.getFieldCounts(field).get(i) != 0) {
						newBrowseData.addFieldEntry(field, vocabulary
							.getEnglishName(value), browseData.getFieldCounts
								(field).get(i));
					}					
					i++;					
				}

			} else {
				int i = 0;
				for (String value : browseData.getFieldValues(field)) {
					if(browseData.getFieldCounts(field).get(i) != 0) {
						newBrowseData.addFieldEntry(field, value, browseData
							.getFieldCounts(field).get(i));
					}
					i++;

				}
			}
			
			if(alphabetical){
				Collections.sort(newBrowseData.getFieldValues(field));
				
			} else {
				Collections.sort(newBrowseData.getFieldCounts(field), Collections.reverseOrder());
				
			}
		}
		
		return newBrowseData;
	}

	public Map<String, Vocabulary> getVocabularyMap() {
		return vocabularyMap;
	}

	public void setVocabularyMap(Map<String, Vocabulary> vocabularyMap) {
		this.vocabularyMap = vocabularyMap;
	}

	public LayoutManager getLayoutManager() {
		return layoutManager;
	}

	public void setLayoutManager(LayoutManager layoutManager) {
		this.layoutManager = layoutManager;
	}

}
