package com.tandbergtv.watchpoint.pmm.title.conf;

/**
 * Java Class representation of &lt;jobRuleMenuOptions&gt; and &lt;jobParameterMenuOptions&gt; 's &lt;param&gt; tag.
 * Serves as a utility class to parse the menu option value to title name and property.
 *  
 * @author Raj Prakash
 */
public class MenuOption {
	private static final char NAME_AND_PROPERTY_DELIMITER = '.';
	private static final String PROP_ASSET_LOCATION = "assetLocation";
	private static final String PROP_METADATA_LOCATION = "metadataLocation";
	private static final String PROP_METADATA = "metadata_";
	
	private String name, value;

	/**
	 * Default Constructor.
	 */
	public MenuOption() {}
	
	/**
	 * Constructor.
	 */
	public MenuOption(String name, String value) {
		this.name = name;
		this.value = value;
	}
	
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the value
	 */
	public String getValue() {
		return value;
	}

	/**
	 * @param value the value to set
	 */
	void setValue(String value) {
		this.value = value;
	}
	
	/**
	 * Gets the title name from the configured value.
	 */
	public String getTitleName() {
		return value.substring(0, value.indexOf(NAME_AND_PROPERTY_DELIMITER));
	}
	
	/**
	 * Gets the property from the configured value.
	 */
	public String getProperty() {
		return value.substring(value.indexOf(NAME_AND_PROPERTY_DELIMITER) + 1);
	}
	
	/**
	 * Checks if the property refers to asset location. 
	 */
	public boolean isAssetLocation() {
		return getProperty().equals(PROP_ASSET_LOCATION);
	}
	
	/**
	 * Checks if the property refers to metadata location. 
	 */
	public boolean isMetatadataLocation() {
		return getProperty().equals(PROP_METADATA_LOCATION);
	}
	
	/**
	 * Checks if the property refers to a metadata. 
	 */
	public boolean isMetadata() {
		return getProperty().startsWith(PROP_METADATA);
	}
	
	/**
	 * If the property referes to a metadata, returns the metadata property.
	 * Else, returns null. 
	 */
	public String getMetadataProperty() {
		if(isMetadata())
			return getProperty().substring(PROP_METADATA.length());
		else
			return null;
	}
	
	@Override
	public String toString() {
		return "Name: " + name + " | Value: " + value; 
	}
}
