namespace pdinklag
{
    public static class NameUtils
    {
        /// <summary>
        /// Make the given name valid for an asset address.
        /// </summary>
        /// <param name="name">the name</param>
        public static string ToValidAddressName(this string name)
        {
            var len = name.Length;
            var s = new char[len];
            for (var i = 0; i < len; i++)
            {
                var c = name[i];
                if (char.IsWhiteSpace(c))
                {
                    c = '_';
                }
                s[i] = c;
            }
            return new string(s);
        }

        /// <summary>
        /// Make the given name a valid C# name.
        /// </summary>
        /// <param name="name">the name</param>
        public static string ToValidCsharpName(this string name)
        {
            if(name == null) return null;

            var len = name.Length;
            var s = new char[len];
            for (var i = 0; i < len; i++)
            {
                var c = name[i];
                s[i] = char.IsLetterOrDigit(c) ? c : '_';
            }
            return new string(s);
        }
    }
}
