﻿namespace AsmodeeDigital.Common.Plugin.Manager.Random
{
    /// <summary>
    /// Abstract manager for random number generation
    /// </summary>
    public class RandomManager
    {
        /// <summary>
        /// Instance of implementation of IRandomManager
        /// </summary>
        public static IRandomManager InternalRandomManager;

        /// <summary>
        /// Initialize the random manager with an implementation of IRandomManager
        /// </summary>
        /// <param name="internalRandomManager">Implementation of IRandomManager</param>
        public static void Init(IRandomManager internalRandomManager)
        {
            RandomManager.InternalRandomManager = internalRandomManager;
        }

        /// <summary>
        /// Get the seed of the random number generator
        /// </summary>
        /// <returns>Seed</returns>
        public static int GetSeed()
        {
            return InternalRandomManager.GetSeed();
        }

        /// <summary>
        /// Set the seed of the random number generator
        /// </summary>
        /// <param name="seed">Seed</param>
        public static void SetSeed(int seed)
        {
            InternalRandomManager.SetSeed(seed);
        }

        /// <summary>
        /// Get random value in [0;1[ range
        /// </summary>
        /// <returns>Random value in [0;1[ range</returns>
        public static float GetValue()
        {
            return InternalRandomManager.GetValue();
        }

        /// <summary>
        /// Get random value in [min;max[ range
        /// </summary>
        /// <param name="min">Minimum value (included)</param>
        /// <param name="max">Maximum value (excluded)</param>
        /// <returns>Random value in [min;max[ range</returns>
        public static int GetValue(int min, int max)
        {
            return InternalRandomManager.GetValue(min, max); ;
        }
    }
}
