// Path: src/main/java/com/gikk/twirk/enums/USER_TYPE.java
// public enum USER_TYPE{
// 	/** Type for the owner of the channel (i.e. the user with the
// 	 * same user name as the channel's name. This type has the highest value, 9*/
// 	OWNER(9),
//     
// 	/** Type for mods in the channel. This type has the second highest value, 6 */
// 	MOD(6),
// 
// 	/** Type for Twitch's global mods. This type has a value of 4*/
// 	GLOBAL_MOD(4),
// 
// 	/** Type for Twitch's admins. This type has a value of 4*/
// 	ADMIN(4),
// 
// 	/** Type for Twitch's staff members. This type has a value of 4*/
// 	STAFF(4),
// 
//     /** Type for channel subscribers. This type has a value of 2.
//      *  Note that both Turbo and Subs are given this type.
//      *  For more granularity, check out {@link TwitchUser#isSub()}  and  {@link TwitchUser#isMod()}
//      */
//     SUBSCRIBER(2),
// 
// 	/** Type for users that does not fit into any other classes. This type has a value of 0*/
// 	DEFAULT(0);
// 
// 	/** This type's value. Useful for regulating which kind of users should trigger / can perform
// 	 * certain actions. <br><br>
// 	 *
// 	 * For example:<br>
// 	 * <pre><code>if( user.USER_TYPE.value == USER_TYPE.MOD.value )</code>
// 	 * 	<code>doSomething();</code></pre>
// 	 */
// 	public final int value;
// 
// 	private USER_TYPE(int value) {
// 		this.value = value;
// 	}
// }
// 
// Path: src/main/java/com/gikk/twirk/types/AbstractType.java
// public interface AbstractType {
// 	/**Get the raw chat line, which this type was constructed from
// 	 * 
// 	 * @return The raw chat line, just as seen from the server
// 	 */
// 	public String getRaw();
// }


import com.gikk.twirk.enums.USER_TYPE;
import com.gikk.twirk.types.AbstractType;
package com.gikk.twirk.types.users;


/**Class for representing a CLEARCHAT from Twitch.<br><br>
 * 
 * Twitch sends us USERSTATE as a response whenever we send them a message. The USERSTATE message will tell
 * us certain properties related to ourselves, such as our display name, our color, if we're mod and so on. Objects
 * of this class can thus be used to inspect what properties we have on Twitch's side.<br><br>
 * 
 * For documentation about how Twitch communicates via IRC, 
 * see <a href="https://github.com/justintv/Twitch-API/blob/master/IRC.md">
 * 				https://github.com/justintv/Twitch-API/blob/master/IRC.md </a>
 * 
 * @author Gikkman
 *
 */
public interface Userstate extends AbstractType{
	
	/**Retrieves our display color, as a hex-number. <br>
	 * If we have no color set on Twitch's side, a semi-random color will be generated
	 * 
	 * @return Our display color
	 */
	public int getColor();
	
	/**Retrieves our display name, as seen in chat on Twitch
	 * 
	 * @return Our display name
	 */
	public String getDisplayName();
	
	/**Retrieves information on whether we are a mod in this channel or not.
	 *  
	 * @return <code>true</code> if we are mod
	 */
	public boolean isMod();
	
	/**Retrieves information on whether we are a sub in this channel or not.
	 *  
	 * @return <code>true</code> if we are sub
	 */
	public boolean isSub();
	
	/**Retrieves information on whether we have Turbo, or not
	 * 
	 * @return <code>true</code> if we have turbo
	 */
	public boolean isTurbo();
	
	/**Retrieves information on what type of user we are in this channel. See {@link USER_TYPE}
	 * 
	 * @return Our {@link USER_TYPE}
	 */
// Path: src/main/java/com/gikk/twirk/enums/USER_TYPE.java
// public enum USER_TYPE{
// 	/** Type for the owner of the channel (i.e. the user with the
// 	 * same user name as the channel's name. This type has the highest value, 9*/
// 	OWNER(9),
//     
// 	/** Type for mods in the channel. This type has the second highest value, 6 */
// 	MOD(6),
// 
// 	/** Type for Twitch's global mods. This type has a value of 4*/
// 	GLOBAL_MOD(4),
// 
// 	/** Type for Twitch's admins. This type has a value of 4*/
// 	ADMIN(4),
// 
// 	/** Type for Twitch's staff members. This type has a value of 4*/
// 	STAFF(4),
// 
//     /** Type for channel subscribers. This type has a value of 2.
//      *  Note that both Turbo and Subs are given this type.
//      *  For more granularity, check out {@link TwitchUser#isSub()}  and  {@link TwitchUser#isMod()}
//      */
//     SUBSCRIBER(2),
// 
// 	/** Type for users that does not fit into any other classes. This type has a value of 0*/
// 	DEFAULT(0);
// 
// 	/** This type's value. Useful for regulating which kind of users should trigger / can perform
// 	 * certain actions. <br><br>
// 	 *
// 	 * For example:<br>
// 	 * <pre><code>if( user.USER_TYPE.value == USER_TYPE.MOD.value )</code>
// 	 * 	<code>doSomething();</code></pre>
// 	 */
// 	public final int value;
// 
// 	private USER_TYPE(int value) {
// 		this.value = value;
// 	}
// }
// 
// Path: src/main/java/com/gikk/twirk/types/AbstractType.java
// public interface AbstractType {
// 	/**Get the raw chat line, which this type was constructed from
// 	 * 
// 	 * @return The raw chat line, just as seen from the server
// 	 */
// 	public String getRaw();
// }


// Path: src/main/java/com/gikk/twirk/types/users/Userstate.java
import com.gikk.twirk.enums.USER_TYPE;
import com.gikk.twirk.types.AbstractType;

package com.gikk.twirk.types.users;


/**Class for representing a CLEARCHAT from Twitch.<br><br>
 * 
 * Twitch sends us USERSTATE as a response whenever we send them a message. The USERSTATE message will tell
 * us certain properties related to ourselves, such as our display name, our color, if we're mod and so on. Objects
 * of this class can thus be used to inspect what properties we have on Twitch's side.<br><br>
 * 
 * For documentation about how Twitch communicates via IRC, 
 * see <a href="https://github.com/justintv/Twitch-API/blob/master/IRC.md">
 * 				https://github.com/justintv/Twitch-API/blob/master/IRC.md </a>
 * 
 * @author Gikkman
 *
 */
public interface Userstate extends AbstractType{
	
	/**Retrieves our display color, as a hex-number. <br>
	 * If we have no color set on Twitch's side, a semi-random color will be generated
	 * 
	 * @return Our display color
	 */
	public int getColor();
	
	/**Retrieves our display name, as seen in chat on Twitch
	 * 
	 * @return Our display name
	 */
	public String getDisplayName();
	
	/**Retrieves information on whether we are a mod in this channel or not.
	 *  
	 * @return <code>true</code> if we are mod
	 */
	public boolean isMod();
	
	/**Retrieves information on whether we are a sub in this channel or not.
	 *  
	 * @return <code>true</code> if we are sub
	 */
	public boolean isSub();
	
	/**Retrieves information on whether we have Turbo, or not
	 * 
	 * @return <code>true</code> if we have turbo
	 */
	public boolean isTurbo();
	
	/**Retrieves information on what type of user we are in this channel. See {@link USER_TYPE}
	 * 
	 * @return Our {@link USER_TYPE}
	 */
	public USER_TYPE getUserType();