///Credit judah4
///Sourced from - http://forum.unity3d.com/threads/color-picker.267043/

using System.Globalization;

namespace UnityEngine.UI.Extensions
{
    public class HexRGB : MonoBehaviour
    {
        // Unity 5.1/2 needs an InputFiled vs grabbing the text component
	public InputField hexInput;

        public HSVPicker hsvpicker;

        public void ManipulateViaRGB2Hex()
        {
            Color color = hsvpicker.currentColor;
            string hex = ColorToHex(color);
	     hexInput.text = hex;
        }

        public static string ColorToHex(Color color)
        {
            int r = (int)(color.r * 255);
            int g = (int)(color.g * 255);
            int b = (int)(color.b * 255);
            return string.Format("#{0:X2}{1:X2}{2:X2}", r, g, b);
        }

        public void ManipulateViaHex2RGB()
        {
	     string hex = hexInput.text;
            Vector3 rgb = Hex2RGB(hex);
            Color color = NormalizeVector4(rgb, 255f, 1f); print(rgb);

            hsvpicker.AssignColor(color);
        }

        static Color NormalizeVector4(Vector3 v, float r, float a)
        {
            float red = v.x / r;
            float green = v.y / r;
            float blue = v.z / r;
            return new Color(red, green, blue, a);
        }

        Vector3 Hex2RGB(string hexColor)
        {
            //Remove # if present
            if (hexColor.IndexOf('#') != -1)
                hexColor = hexColor.Replace("#", "");

            int red = 0;
            int green = 0;
            int blue = 0;

            if (hexColor.Length == 6)
            {
                //#RRGGBB
                red = int.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier);
                green = int.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier);
                blue = int.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier);


            }
            else if (hexColor.Length == 3)
            {
                //#RGB
                red = int.Parse(hexColor[0].ToString() + hexColor[0].ToString(), NumberStyles.AllowHexSpecifier);
                green = int.Parse(hexColor[1].ToString() + hexColor[1].ToString(), NumberStyles.AllowHexSpecifier);
                blue = int.Parse(hexColor[2].ToString() + hexColor[2].ToString(), NumberStyles.AllowHexSpecifier);
            }

            return new Vector3(red, green, blue);

        }

    }
}