﻿namespace JLGames.RocketDriver.Actions.Localx
{
    internal static class Internel
    {
        /// <summary>
        /// Array to string.
        /// 数组转字符串
        /// </summary>
        /// <param name="values"></param>
        /// <returns></returns>
        public static string ArrayToString<T>(T[] values)
        {
            if (null == values || values.Length == 0) return "";
            return string.Join($"{LocalKeys.Separator}", values);
        }

        /// <summary>
        /// String to bool array.
        /// 字符串转Bool数组
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool[] BoolArrayFromString(string value)
        {
            if (null == value) return null;
            value = value.Trim();
            if (string.IsNullOrEmpty(value)) return null;
            var values = value.Split(LocalKeys.Separator);
            var rs = new bool[values.Length];
            for (var index = 0; index < values.Length; index++)
            {
                var v = values[index];
                rs[index] = !("" == v || "0" == v || "false" == v.ToLower());
            }

            return rs;
        }

        /// <summary>
        /// String to int array.
        /// 字符中转Int数组
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static int[] IntArrayFromString(string value)
        {
            if (null == value) return null;
            value = value.Trim();
            if (string.IsNullOrEmpty(value)) return null;
            var values = value.Split(LocalKeys.Separator);
            var rs = new int[values.Length];
            for (var index = 0; index < values.Length; index++)
            {
                rs[index] = int.Parse(values[index]);
            }

            return rs;
        }

        /// <summary>
        /// String to float array.
        /// 字符中转float数组
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static float[] FloatArrayFromString(string value)
        {
            if (null == value) return null;
            value = value.Trim();
            if (string.IsNullOrEmpty(value)) return null;
            var values = value.Split(LocalKeys.Separator);
            var rs = new float[values.Length];
            for (var index = 0; index < values.Length; index++)
            {
                rs[index] = float.Parse(values[index]);
            }

            return rs;
        }

        /// <summary>
        /// Merge elements to a key.
        /// 合并Key
        /// </summary>
        /// <param name="key"></param>
        /// <param name="domain"></param>
        /// <param name="version"></param>
        /// <returns></returns>
        public static string InnerMergeKey(string key, string domain, string version)
        {
            if (string.IsNullOrEmpty(domain) && string.IsNullOrEmpty(version)) return key;
            if (string.IsNullOrEmpty(version)) return $"{domain}:{key}";
            if (string.IsNullOrEmpty(domain)) return $"_{version}:{key}";
            return $"{domain}_{version}:{key}";
        }
    }
}