﻿using System;
using UnityEngine;

namespace JLGames.RocketDriver.Actions.Graphicsx
{
    public static class ColorUtil
    {
        public static Color32 Color32FromRgb(string rgb)
        {
            if (rgb.StartsWith("#")) rgb = rgb.Substring(1);
            var value = Convert.ToUInt32(rgb, 16);
            return Color32FromRgb(value);
        }

        public static Color32 Color32FromRgb(uint rgb)
        {
            var r = (rgb & 0xFF0000) >> 16;
            var g = (rgb & 0x00FF00) >> 8;
            var b = (rgb & 0x0000FF);
            return new Color32((byte) r, (byte) g, (byte) b, 255);
        }

        public static Color32 Color32FromRgba(string rgba)
        {
            if (rgba.StartsWith("#")) rgba = rgba.Substring(1);
            var value = Convert.ToUInt32(rgba, 16);
            return Color32FromRgba(value);
        }

        public static Color32 Color32FromRgba(uint rgba)
        {
            var r = (rgba & 0xFF000000) >> 24;
            var g = (rgba & 0x00FF0000) >> 16;
            var b = (rgba & 0x0000FF00) >> 8;
            var a = (rgba & 0x000000FF);
            return new Color32((byte) r, (byte) g, (byte) b, (byte) a);
        }

        public static Color32 Color32FromArgb(string argb)
        {
            if (argb.StartsWith("#")) argb = argb.Substring(1);
            var value = Convert.ToUInt32(argb, 16);
            return Color32FromArgb(value);
        }

        public static Color32 Color32FromArgb(uint argb)
        {
            var a = (argb & 0xFF000000) >> 24;
            var r = (argb & 0x00FF0000) >> 16;
            var g = (argb & 0x0000FF00) >> 8;
            var b = (argb & 0x000000FF);
            return new Color32((byte) r, (byte) g, (byte) b, (byte) a);
        }

        public static bool Color32Equals(Color32 color1, Color32 color2)
        {
            return color1.r == color2.r && color1.g == color2.g && color1.b == color2.b && color1.a == color2.a;
        }

        public static bool ColorEquals(Color color1, Color color2)
        {
            return color1 == color2;
        }

        public static Color FromHtml(string id)
        {
            Color color;

            if (!id.StartsWith("#"))
            {
                id = id.Insert(0, "#");
            }

            ColorUtility.TryParseHtmlString(id, out color);
            return color;
        }
    }
}