package com.tandbergtv.metadatamanager.specimpl.ttv;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import com.tandbergtv.metadatamanager.search.CriteriaBuilder;
import com.tandbergtv.metadatamanager.specimpl.IdentifierBase;
import com.tandbergtv.workflow.util.SearchCriteria;

/**
 * All assets saved in the db in TTV format have a TTVId. Note: Later when
 * versioning is introduced, this id can have a version field as well.
 * 
 * @author spuranik
 * 
 */
public final class TTVId extends IdentifierBase {

	private static final long serialVersionUID = -7715180869303619010L;

	private long id;

	private static String TTV_ID = "id";

	public TTVId() {
		super();
	}

	public TTVId(long id) {
		super();
		this.id = id;
	}

	public long getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(long id) {
		this.id = id;
	}

	public Map<String, String> getSpecIdentifiers() {
		Map<String, String> map = new HashMap<String, String>();
		map.put(TTV_ID, String.valueOf(id));
		return map;
	}

	public Map<String, String> getTTVPaths() {
		Map<String, String> paths = new HashMap<String, String>();
		paths.put(TTV_ID, TTV_ID);
		return paths;
	}

	public void setSpecIdentifiers(Map<String, String> identifiers) {
		Iterator<Entry<String, String>> fields = identifiers.entrySet()
				.iterator();
		while (fields.hasNext()) {
			Entry<String, String> entry = fields.next();
			if (entry.getKey().equals(TTV_ID)) {
				this.setId(Long.parseLong(entry.getValue()));
			}
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.tandbergtv.metadatamanager.specimpl.IdentifierBase#buildSearchCriteria
	 * (com.tandbergtv.metadatamanager.model.SearchCriteria)
	 */
	@Override
	protected SearchCriteria buildSearchCriteria(
			com.tandbergtv.metadatamanager.model.SearchCriteria criteriaMap, boolean idOnly) {
		return CriteriaBuilder.buildSearchCriteria(criteriaMap, idOnly);
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidIdentifier() {
		if (id > 0) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final TTVId other = (TTVId) obj;
		if (id != other.id)
			return false;
		return true;
	}
	
	
}
