package com.k_int.aggr2.mimsy.solr;

import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

import org.apache.solr.common.SolrInputDocument;

import com.k_int.aggr2.mimsy.data.CIIMGroupDataDTO;
import com.k_int.aggr2.mimsy.data.ExtensionFieldDTO;
import com.k_int.aggr2.mimsy.data.InstructionDTO;
import com.k_int.aggr2.mimsy.data.MimsyCuratedGroupDTO;
import com.k_int.aggr2.mimsy.data.MimsyDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyMediaDataDTO;
import com.k_int.aggr2.mimsy.data.conversion.AbstractCuratedGroupConverter;
import com.k_int.mimsy.ref.DataException;
import com.k_int.mimsy.ref.MediaRecordTypeEnum;

public class SolrCuratedGroupConverter extends AbstractCuratedGroupConverter {

	private SolrInputDocument doc;
	private Properties solr_props;
	
	public SolrCuratedGroupConverter(SolrInputDocument doc, Properties solr_props)
	{
		this.doc=doc;
		this.solr_props=solr_props;
	}
	@Override
	protected void convertCIIMData(CIIMGroupDataDTO data) throws DataException {
		if(data==null)
			return;
		if(data.getTop()!=null)
			convert("mo:topGroup","true");
		
		convert("mo:longDescription",data.getLongDescription());
		convertMediaLinks(data.getLinkedMedia());
		
		if(data.getExtensionFields() != null && data.getExtensionFields().size() > 0)
		{
			for(ExtensionFieldDTO field : data.getExtensionFields())
			{
				if(field.getValues() != null && field.getValues().size() > 0)
				{
					for(String value : field.getValues())
					{
						convert("mo:"+field.getIndexName(), value);
					}
				}
			}
		}
	}
	
	protected void convertMediaLinks(Set<MimsyMediaDataDTO> linked_media)
	throws DataException 
	{
		if(linked_media.size()==0)
			return;

		Iterator<MimsyMediaDataDTO> i = linked_media.iterator();
		while(i.hasNext())
		{
			MimsyMediaDataDTO ref = i.next();
		       		
			convertReference("mo:mediaReference","urn://mol/"+ref.getMimsyIdentifier());
			
			if(ref.getRecordType()==MediaRecordTypeEnum.IMAGE)
			{
				convert("mo:previewMediaLocation",ref.getPreviewRelativePath());
				convert("mo:midMediaLocation",ref.getMidRelativePath());
				convert("mo:largeMediaLocation",ref.getLargeRelativePath());
				convert("mo:originalMediaLocation",ref.getLargeDonorRelativePath());	 	              
			}
			else if(ref.getDonorRelativePath()!=null)
        	{
				convert("mo:originalMediaLocation",ref.getDonorRelativePath());
        	}
			String rel="undefined";
			if(ref.getRelationship()!=null)
				rel=ref.getRelationship();
			convert("mo:mediaRelation",rel);
		}
	}
		
		// copied from the object solr converter
		public void convertReference(String element, String val) throws DataException {
			
			SolrHelper.addField(solr_props,doc,element, null, val,false);
		}



	@Override
	protected void convert(String elementVal, String val) throws DataException {
		SolrHelper.addField(solr_props,doc,elementVal, null, val,true);

	}

	@Override
	protected void convertConfAndLastUpdate(MimsyDataDTO data)
			throws DataException {
		SolrHelper.addConfAndLastUpdate(solr_props,doc,data);

	}

	@Override
	protected void convertInstructions(Set<InstructionDTO> instructions)
			throws DataException {
		// not used

	}

	@Override
	public void prefix(MimsyCuratedGroupDTO Type) throws DataException {
		// not used

	}

	@Override
	public void suffix(MimsyCuratedGroupDTO Type) throws DataException {
		// not used

	}

}
