using System;
namespace iWareCommon.Utils
{
    public class StringHelper
    {
        private static string charStr = "0123456789";
        /// 
        /// 换行字符串
        /// 
        /// 
        /// 
        public static string GetNewLine()
        {
            return "\r\n";
        }
        /// 
        /// 获取日志
        /// 
        /// 
        /// 
        public static string GetLog(string log)
        {
            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ----- " + log + GetNewLine();
        }
        /// 
        /// 格式化字符串,将物料中的单引号格式化为两个单引号
        /// 
        /// 
        /// 
        public static string RelpaceQuot(string str)
        {
            return string.IsNullOrEmpty(str) ? "" : str.Replace("'", "''");
        }
        /// 
        /// 将型如yyyyMMdd的日期类型转为yyyy-MM-dd的日期类型
        /// 
        /// 
        /// 
        public static string ConvertDateTimeStr(string str)
        {
            if (string.IsNullOrEmpty(str) || str.Length != 8)
            {
                return str;
            }
            return str.Substring(0, 4) + "-" + str.Substring(4, 2) + "-" + str.Substring(6, 2);
        }
        /// 
        /// 获取下一个字符串
        /// 
        /// 
        /// 
        public static string NextStr(string str)
        {
            var charArray = charStr.ToCharArray();
            var len = str.Length;
            if (str == "".PadLeft(len, charArray[charArray.Length - 1])) { return "".PadLeft(len + 1, charArray[0]); }
            var strArray = str.ToCharArray();
            for (var i = 0; i < strArray.Length; i++)
            {
                var pos = charStr.IndexOf(strArray[i]);
                if (pos < charArray.Length - 1)
                {
                    strArray[i] = charArray[pos + 1];
                    break;
                }
                strArray[i] = charArray[0];
            }
            return new string(strArray);
        }
        /// 
        /// 获取第一个字符串
        /// 
        /// 
        public static string GetFirstStr()
        {
            var charArray = charStr.ToCharArray();
            return "".PadLeft(6, charArray[0]);
        }
        /// 
        /// 压缩字符串的算法
        /// 
        /// 
        /// 
        public static string Compress(string str)
        {
            var res = "";
            var lastChar = "\0";
            var frequency = 0;
            var currentChar = string.Empty;
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i].ToString() != lastChar)
                {
                    if (!string.IsNullOrEmpty(currentChar)) { res += (frequency - 1 > 0 ? (frequency - 1).ToString() : string.Empty) + currentChar; }
                    currentChar = str[i].ToString();
                    lastChar = currentChar;
                    frequency = 1;
                }
                else { frequency += 1; }
            }
            if (!string.IsNullOrEmpty(currentChar)) { res += (frequency - 1 > 0 ? (frequency - 1).ToString() : string.Empty) + currentChar; }
            return res;
        }
        /// 
        /// 解压字符串的算法
        /// 
        /// 
        /// 
        public static string DeCompress(string str)
        {
            var nChars = "0123456789";
            var res = "";
            var nbStr = "0";
            for (int i = 0; i < str.Length; i++)
            {
                if (nChars.IndexOf(str[i]) > -1) { nbStr += str[i]; }
                else
                {
                    var nb = Convert.ToInt32(nbStr) + 1;
                    res += "".PadLeft(nb, str[i]);
                    nbStr = "0";
                }
            }
            return res;
        }
        /// 
        /// 获取str字符串中key的值
        /// 
        /// 
        /// 
        public static string GetValue(string syntax, string key)
        {
            var str = string.Format("\"{0}\":", key);
            var index = syntax.IndexOf(str);
            if (index < 0)
            {
                return "";
            }
            var beginIndex = syntax.IndexOf("\"", index + str.Length);
            var endIndex = syntax.IndexOf("\"", beginIndex + 1);
            return syntax.Substring(beginIndex + 1, endIndex - beginIndex - 1);
        }
    }
}