// Path: src/main/java/com/gikk/twirk/enums/EMOTE_SIZE.java
// public enum EMOTE_SIZE{
// 	SMALL("/1.0"),
// 	MEDIUM("/2.0"),
// 	LARGE("/3.0");		
// 	public final String value;
// 	private EMOTE_SIZE(String val){ this.value = val; }
// }


import java.util.LinkedList;
import com.gikk.twirk.enums.EMOTE_SIZE;
package com.gikk.twirk.types.emote;



/**Class for representing a Twitch emote, which can be embedded into chat messages.<br><br>
 * 
 * An emote has three features: <ul>
 * <li>EmoteID - The numeric ID for the emote.
 * <li>Pattern - The emote's string pattern (Ex. 'Kappa')
 * <li>Indices - For each time an emote is present in a message, the emotes begin- and end index must be listed. Begin is inclusive, end is exclusive
 * </ul>
 * For example, if the message is: {@code Kappa PogChamp Kappa}<br> the TwirkEmote for Kappa will be:<ul>
 * <li>EmoteID = 25
 * <li>Pattern = Kappa
 * <li>Indices = (0,5), (15,20)
 * 
 * @author Gikkman
 *
 */
public interface Emote {
	/** Fetches the emotes ID as String. This became necessary after Twitch start
	 * including other characters than numbers in emote IDs
	 *
	 * @return The emotes ID
	 */
	String getEmoteIDString();
	
	/** A list of pairs on indices. Each pair is a BEGIN-END pair of a emote occurrence in the message.<br><br>
	 * 
	 * For example, if the message is: {@code Kappa PogChamp Kappa}<br> the list for emote 'Kappa' will include these pairs:<ul>
	 * <li> (0,5)
	 * <li> (15,20)
	 * </ul>
	 * 
	 * @return The indices this emote takes up in the associated message
	 */
	LinkedList<EmoteIndices> getIndices();
	
	/** The emote's pattern. For example: 'Kappa'
	 * 
	 * @return The emote's pattern
	 */
	String getPattern();
	
	/**Emote images can be downloaded from Twitch's server, and come in three
	 * sizes. Use this method to get the address for the emote.
	 * 
	 * @param imageSize Emotes comes in three sizes. Specify which size you want
	 * @return The address for the emote's image
	 */
// Path: src/main/java/com/gikk/twirk/enums/EMOTE_SIZE.java
// public enum EMOTE_SIZE{
// 	SMALL("/1.0"),
// 	MEDIUM("/2.0"),
// 	LARGE("/3.0");		
// 	public final String value;
// 	private EMOTE_SIZE(String val){ this.value = val; }
// }


// Path: src/main/java/com/gikk/twirk/types/emote/Emote.java
import java.util.LinkedList;
import com.gikk.twirk.enums.EMOTE_SIZE;

package com.gikk.twirk.types.emote;



/**Class for representing a Twitch emote, which can be embedded into chat messages.<br><br>
 * 
 * An emote has three features: <ul>
 * <li>EmoteID - The numeric ID for the emote.
 * <li>Pattern - The emote's string pattern (Ex. 'Kappa')
 * <li>Indices - For each time an emote is present in a message, the emotes begin- and end index must be listed. Begin is inclusive, end is exclusive
 * </ul>
 * For example, if the message is: {@code Kappa PogChamp Kappa}<br> the TwirkEmote for Kappa will be:<ul>
 * <li>EmoteID = 25
 * <li>Pattern = Kappa
 * <li>Indices = (0,5), (15,20)
 * 
 * @author Gikkman
 *
 */
public interface Emote {
	/** Fetches the emotes ID as String. This became necessary after Twitch start
	 * including other characters than numbers in emote IDs
	 *
	 * @return The emotes ID
	 */
	String getEmoteIDString();
	
	/** A list of pairs on indices. Each pair is a BEGIN-END pair of a emote occurrence in the message.<br><br>
	 * 
	 * For example, if the message is: {@code Kappa PogChamp Kappa}<br> the list for emote 'Kappa' will include these pairs:<ul>
	 * <li> (0,5)
	 * <li> (15,20)
	 * </ul>
	 * 
	 * @return The indices this emote takes up in the associated message
	 */
	LinkedList<EmoteIndices> getIndices();
	
	/** The emote's pattern. For example: 'Kappa'
	 * 
	 * @return The emote's pattern
	 */
	String getPattern();
	
	/**Emote images can be downloaded from Twitch's server, and come in three
	 * sizes. Use this method to get the address for the emote.
	 * 
	 * @param imageSize Emotes comes in three sizes. Specify which size you want
	 * @return The address for the emote's image
	 */
	String getEmoteImageUrl(EMOTE_SIZE imageSize);