package eu.dnetlib.domain.data;

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

public class BrowseData {

	private HashMap<String, FieldData> data = null;
	
	public BrowseData() {
		data = new HashMap<String, FieldData>();
	}
	
	public HashMap<String, FieldData> getData() {
		return data;
	}

	public void setData(HashMap<String, FieldData> data) {
		this.data = data;
	}
	
	public void addFieldEntry(String field, String value, int count) {
		
		// lowercase field!
		field = field.toLowerCase();
		
		FieldData fieldData = data.get(field);
		if (fieldData == null) {
			fieldData = new FieldData(field);
			data.put(field, fieldData);
		}
		fieldData.getValues().add(value);
		fieldData.getCount().add(count);
	}
	
	public Set<String> getFields() {
		return data.keySet();
	}
	
	public List<String> getFieldValues(String field) {
		FieldData fd = data.get(field.toLowerCase());
		if (fd == null) {
			return Collections.emptyList();
		} else {
			return fd.getValues(); 
		}
	}
	
	public List<Integer> getFieldCounts(String field) {
		FieldData fd = data.get(field.toLowerCase());
		if (fd == null) {
			return Collections.emptyList();
		} else {
			return fd.getCount();
		}
	}
	
	@Override
	public String toString() {
		StringBuffer buffer = new StringBuffer();
		
		for (FieldData field : data.values()) {
			buffer.append(field);
		}
		
		return buffer.toString();
	}
}

class FieldData {
	
	private String field = null;
	private List<Integer> count = null;
	private List<String> values = null;
	
	public FieldData() {
		this("");
	}
	
	public FieldData(String field) {
		this.field = field;
		this.count = new ArrayList<Integer>();
		this.values = new ArrayList<String>();
	}
	
	public List<Integer> getCount() {
		return count;
	}

	public void setCount(List<Integer> count) {
		this.count = count;
	}

	public String getField() {
		return field;
	}

	public void setField(String field) {
		this.field = field;
	}

	public List<String> getValues() {
		return values;
	}

	public void setValues(List<String> values) {
		this.values = values;
	}

	@Override
	public String toString() {
		StringBuffer buffer = new StringBuffer();
		
		buffer.append("field: ").append(field).append("\n");
		for (int i = 0; i < values.size(); i++) {
			buffer.append("\t").append(values.get(i));
			buffer.append(" (").append(count.get(i)).append(")\n");
		}
		
		return buffer.toString();
	}
}


