package gr.uoa.di.web.utils;

import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;

import org.apache.log4j.Logger;

import eu.dnetlib.domain.functionality.DocumentField;
import eu.dnetlib.domain.functionality.Searchable;
import eu.dnetlib.domain.functionality.SearchableDate;

public class LocaleDescriptionUtil {
	
	public static final Logger logger = Logger.getLogger(LocaleDescriptionUtil.class);
	
	public static String getFieldDescription(Map<Locale, String> descriptionMap, Locale locale) {
		if (descriptionMap != null) {
			String description = descriptionMap.get(locale);			
			if (description == null) {
				return descriptionMap.get(new Locale("en", "GB"));
			}
			
			return description;
		}
		
		return null;
		
	}
	
	public static String getSecondaryLink(DocumentField field, Locale locale) {
		Map<Locale, String> descriptionMap = field.getSecondaryLinkMap();
		if (descriptionMap != null) {
			String description = descriptionMap.get(locale);			
			if (description == null) {
				return descriptionMap.get(new Locale("en", "GB"));
			}
			
			return description;
		}
		
		return null;
	}
	
	public static String getSearchableDescription(Searchable searchable, Locale locale) {
		Map<Locale, String> descriptionMap = searchable.getDescriptionMap();
		if (descriptionMap != null) {
			String description = searchable.getDescriptionMap().get(locale);			
			if (description == null) {
				return descriptionMap.get(new Locale("en", "GB"));
			}
			
			return description;
		}
		
		return null;
	}
	
	public static String getDescription(Map<Locale, String> descriptionMap, Locale locale) {		
		String description = descriptionMap.get(locale);			
		if (description == null) {
			return descriptionMap.get(new Locale("en", "GB"));
		}
		
		return description;
	}

	public static TreeMap<Integer, String> getPeriodBack(SearchableDate searchableDate, Locale locale) {		
		TreeMap<Integer, Map<Locale, String>> periodBackMap = searchableDate.getPeriodBackMap();		
		TreeMap<Integer, String> periodBack = new TreeMap<Integer, String>();
		
		for (Integer integer:periodBackMap.keySet()){
			String description = periodBackMap.get(integer).get(locale);
			if (description == null) {
				description = periodBackMap.get(integer).get(new Locale("en", "GB"));
			}
			periodBack.put(integer, description);
		}

		return periodBack;
	}
	
	public static long[] getRanges(SearchableDate searchableDate, Locale locale){
		if (getPeriodBack(searchableDate, locale).values() == null || 
				getPeriodBack(searchableDate, locale).values().isEmpty()) {
			return null;
		}
		
		long[] ranges = new long[getPeriodBack(searchableDate, locale).keySet().size()];
		int i = 0;
		for (Integer range:getPeriodBack(searchableDate, locale).keySet()){
			ranges[i] = range;
			i++;
		}
		return ranges;
	}
}
