﻿namespace BugseePlugin
{
    /// <summary>
    /// 
    /// </summary>
    public interface IBugseeColor
    {
        /// <summary>
        /// Gets the alpha component of this color
        /// </summary>
        byte A { get; }
        /// <summary>
        /// Gets the red component of this color
        /// </summary>
        byte R { get; }
        /// <summary>
        /// Gets the green component of this color
        /// </summary>
        byte G { get; }
        /// <summary>
        /// Gets the blue component of this color
        /// </summary>
        byte B { get; }
        /// <summary>
        /// Gets the name of this color (if it's listed in the known colors)
        /// </summary>
        string Name { get; }
        /// <summary>
        /// Indicates whether this is a known color (listed in the known
        /// colors)
        /// </summary>
        bool IsKnownColor { get; }
        /// <summary>
        /// Indicates whether this is a system color
        /// </summary>
        bool IsSystemColor { get; }
        /// <summary>
        /// Indicates whether this color has predefined name
        /// </summary>
        bool IsNamedColor { get; }
        /// <summary>
        /// Indicates whether this is an empty color
        /// </summary>
        bool IsEmpty { get; }

        /// <summary>
        /// Checks whether specified color is equal to this color
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        bool Equals(object obj);
        /// <summary>
        /// Gets brightness of this color
        /// </summary>
        /// <returns></returns>
        float GetBrightness();
        /// <summary>
        /// Gets has code for this color
        /// </summary>
        /// <returns></returns>
        int GetHashCode();
        /// <summary>
        /// Gets hue of this color
        /// </summary>
        /// <returns></returns>
        float GetHue();
        /// <summary>
        /// Gets saturation of this color
        /// </summary>
        /// <returns></returns>
        float GetSaturation();
        /// <summary>
        /// Gets the integer representing this color as ARGB (two bytes per
        /// component)
        /// </summary>
        /// <returns></returns>
        int ToArgb();
        /// <summary>
        /// Returns the hexadecimal representation of this color
        /// </summary>
        /// <returns></returns>
        string ToHex();
        /// <summary>
        /// Returns the HTML-compliant hexadecimal representation of this color
        /// </summary>
        /// <returns></returns>
        string toHtmlHex();
        /// <summary>
        /// Returns generic string representation of this color
        /// </summary>
        /// <returns></returns>
        string ToString();
    }
}