package edu.fiu.jtlex.data;

/**
 * Represents the MAKEINSTANCE tag.
 * 
 * @author arada002
 *
 */

public interface IInstance extends INode{
	
	/**
	 * An enum that represents the different tenses of event instance phrases.
	 */
	public enum Tense {
		PAST,
		PRESENT,
		FUTURE,
		NONE,
		INFINITIVE,
		PRESPART,
		PASTPART
	}
	
	/**
	 * An enum that represents the different aspects of an event instance phrase.
	 */
	public enum Aspect {
		PROGRESSIVE,
		PERFECTIVE,
		PERFECTIVE_PROGRESSIVE,
		NONE
	}
	
	/**
	 * An enum that represents the different part of speech categories.
	 */
	public enum Pos {
		ADJECTIVE,
		NOUN,
		VERB,
		PREPOSITION,
		OTHER
	}
	
	/**
	 * An enum that indicates whether the event instance phrase is negated.
	 */
	public enum Polarity {
		POS, 
		NEG
	}
	
	
	/**
	 * Returns a unique event instance ID number.
	 * @return eventInstanceID
	 * 		   may not return less than 1
	 */
	public int getId();
	
	/**
	 * Returns the ID of the event to which the instance is related.
	 * @return eventID
	 * 		   may not return less than 1
	 */
	public IEvent getEvent();
	
	/**
	 * Returns the tense of the verbal phrase.
	 * @return tense
	 * 		   may not return <code>null</code>
	 */
	public Tense getTense();
	
	/**
	 * Returns the aspect of the verbal phrase.
	 * @return aspect
	 * 		   may not return <code>null</code>
	 */
	public Aspect getAspect();
	
	/**
	 * Returns the syntactic category of the phrase (part of speech).
	 * @return aspect
	 * 		   may not return <code>null</code>
	 */
	public Pos getPos();
	
	/**
	 * Polarity indicates whether the eventInstance phrase is negated. Returns polarity.
	 * @return polarity
	 * 		   NEG if the phrase is negated
	 * 		   POS if the phrase is not negated
	 * 		   may not return <code>null</code>
	 */
	public Polarity getPolarity();
	
	/**
	 * Returns the modal word that modifies the instance. (???)
	 * @return modality
	 * 		   may return <code>null</code>
	 */
	public String getModality();
	
	/**
	 * Returns the the signal object.
	 * @return signal
	 * 		   may return <code>null</code> 
	 */
	public ISignal getSignal();
	
	/**
	 * Returns the cardinality of the event instance.
	 * @return cardinality
	 * 		   0 if not defined
	 * 		   may not return less than 0
	 */
	public String getCardinality();
	

	/**
	 * Returns a unique event instance ID string.
	 * @return eventInstanceID string
	 * 		   may not return <code>null</code> 
	 */
	public String getIdStr();
	

}

