// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using osu.Framework.Graphics;
using osuTK.Graphics;

namespace osu.Game.Skinning
{
    /// <summary>
    /// Compatibility methods to convert osu!stable colours to osu!lazer-compatible ones. Should be used for legacy skins only.
    /// </summary>
    public static class LegacyColourCompatibility
    {
        /// <summary>
        /// Forces an alpha of 1 if a given <see cref="Color4"/> is fully transparent.
        /// </summary>
        /// <remarks>
        /// This is equivalent to setting colour post-constructor in osu!stable.
        /// </remarks>
        /// <param name="colour">The <see cref="Color4"/> to disallow zero alpha on.</param>
        /// <returns>The resultant <see cref="Color4"/>.</returns>
        public static Color4 DisallowZeroAlpha(Color4 colour)
        {
            if (colour.A == 0)
                colour.A = 1;
            return colour;
        }

        /// <summary>
        /// Applies a <see cref="Color4"/> to a <see cref="Drawable"/>, doubling the alpha value into the <see cref="Drawable.Alpha"/> property.
        /// </summary>
        /// <remarks>
        /// This is equivalent to setting colour in the constructor in osu!stable.
        /// </remarks>
        /// <param name="drawable">The <see cref="Drawable"/> to apply the colour to.</param>
        /// <param name="colour">The <see cref="Color4"/> to apply.</param>
        /// <returns>The given <paramref name="drawable"/>.</returns>
        public static T ApplyWithDoubledAlpha<T>(T drawable, Color4 colour)
            where T : Drawable
        {
            drawable.Alpha = colour.A;
            drawable.Colour = DisallowZeroAlpha(colour);
            return drawable;
        }
    }
}