package com.ericsson.metadatamanager.specimpl.osvod;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import com.tandbergtv.metadatamanager.model.Asset;
import com.tandbergtv.metadatamanager.model.CustomField;
import com.tandbergtv.metadatamanager.model.Field;
import com.tandbergtv.metadatamanager.spec.IIdentifier;
import com.tandbergtv.metadatamanager.specimpl.IdentifierBase;
import com.tandbergtv.metadatamanager.specimpl.SingleTitleSpecHandler;

//Must ensure uniqueness of all spec specific ids on add and update.

public class OpenStreamVODSpecHandler extends SingleTitleSpecHandler {

	private static final String DUMMY_ROOTELEMENT_NAME = "VOD";

	public OpenStreamVODSpecHandler() {
		super();
		this.alias = "OpenStreamVOD";
		this.rootElementName = DUMMY_ROOTELEMENT_NAME;
	}

	@Override
	public IIdentifier extractId(Asset asset) {
		OpenStreamVODIdentifier id = new OpenStreamVODIdentifier();

		// set search service
		id.setSearchService(getSearchService());

		// set mapping resource
		id.setMappingResourceUrl(getMappingResourceUrl());

		// extract the id values after getting the ttvxpaths for the id fields.
		Map<String, String> idXPaths = id.getTTVPaths();

		Map<String, String> idValues = new HashMap<String, String>();
		Iterator<Entry<String, String>> iter = idXPaths.entrySet().iterator();
		while (iter.hasNext()) {
			Entry<String, String> entry = iter.next();
			Field f = asset.getFirstField(entry.getValue());
			if (f != null) {
				idValues.put(entry.getKey(), f.getValue());
			}
		}

		// set these values in the id.
		id.setSpecIdentifiers(idValues);
		return id;
	}

	@Override
	public IdentifierBase getIdentifier() {
		OpenStreamVODIdentifier identifier = new OpenStreamVODIdentifier();
		identifier.setSearchService(searchService);
		identifier.setMappingResourceUrl(mappingResourceUrl);
		
		return identifier;
		
	}

	@Override
	protected boolean isXPathPartOfSpec(String assetType, String ttvXPath) {
		boolean supperResult = super.isXPathPartOfSpec(assetType, ttvXPath);
		if(!supperResult && ttvXPath!= null && ttvXPath.contains(CustomField.CUSTOMFIELD)){
			return true;
		}else{
			return supperResult;
		}
	}
	
	
}