using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;

namespace Common
{
    public class CommonHelper
    {
        public static string GetGuid
        {
            get
            {
                return Guid.NewGuid().ToString().ToLower();
            }
        }

        public static int GetInt(object obj)
        {
            int result;
            if (obj != null)
            {
                int i;
                int.TryParse(obj.ToString(), out i);
                result = i;
            }
            else
            {
                result = 0;
            }
            return result;
        }

        public static float GetFloat(object obj)
        {
            float i;
            float.TryParse(obj.ToString(), out i);
            return i;
        }

        public static int GetInt(object obj, int exceptionvalue)
        {
            int result;
            if (obj == null)
            {
                result = exceptionvalue;
            }
            else
            {
                if (string.IsNullOrEmpty(obj.ToString()))
                {
                    result = exceptionvalue;
                }
                else
                {
                    int i = exceptionvalue;
                    try
                    {
                        i = Convert.ToInt32(obj);
                    }
                    catch
                    {
                        i = exceptionvalue;
                    }
                    result = i;
                }
            }
            return result;
        }

        public static byte Getbyte(object obj)
        {
            byte result;
            if (obj.ToString() != "")
            {
                result = byte.Parse(obj.ToString());
            }
            else
            {
                result = 0;
            }
            return result;
        }

        public static long GetLong(object obj)
        {
            long result;
            if (obj.ToString() != "")
            {
                result = long.Parse(obj.ToString());
            }
            else
            {
                result = 0L;
            }
            return result;
        }

        public static long GetLong(object obj, long exceptionvalue)
        {
            long result;
            if (obj == null)
            {
                result = exceptionvalue;
            }
            else
            {
                if (string.IsNullOrEmpty(obj.ToString()))
                {
                    result = exceptionvalue;
                }
                else
                {
                    long i = exceptionvalue;
                    try
                    {
                        i = Convert.ToInt64(obj);
                    }
                    catch
                    {
                        i = exceptionvalue;
                    }
                    result = i;
                }
            }
            return result;
        }

        public static decimal GetDecimal(object obj)
        {
            decimal result;
            if (obj.ToString() != "")
            {
                result = decimal.Parse(obj.ToString());
            }
            else
            {
                result = 0m;
            }
            return result;
        }

        public static DateTime GetDateTime(object obj)
        {
            DateTime result;
            if (obj.ToString() != "")
            {
                result = DateTime.Parse(obj.ToString());
            }
            else
            {
                result = DateTime.Now;
            }
            return result;
        }

        public static string GetFormatDateTime(object obj, string Format)
        {
            string result;
            if (obj.ToString() != "")
            {
                result = DateTime.Parse(obj.ToString()).ToString(Format);
            }
            else
            {
                result = "";
            }
            return result;
        }

        public static bool GetBool(object obj)
        {
            bool result;
            if (obj != null)
            {
                bool flag;
                bool.TryParse(obj.ToString(), out flag);
                result = flag;
            }
            else
            {
                result = false;
            }
            return result;
        }

        public static byte[] GetByte(object obj)
        {
            byte[] result;
            if (obj.ToString() != "")
            {
                result = (byte[])obj;
            }
            else
            {
                result = null;
            }
            return result;
        }

        public static string GetString(object obj)
        {
            string result;
            if (obj != null && obj != DBNull.Value)
            {
                result = obj.ToString();
            }
            else
            {
                result = "";
            }
            return result;
        }

        public static bool IsDateTime(string strValue)
        {
            bool result;
            if (strValue == null || strValue == "")
            {
                result = false;
            }
            else
            {
                string regexDate = "[1-2]{1}[0-9]{3}((-|[.]){1}(([0]?[1-9]{1})|(1[0-2]{1}))((-|[.]){1}((([0]?[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1})))( (([0-1]{1}[0-9]{1})|2[0-3]{1}):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})(\\.[0-9]{3})?)?)?)?$";
                if (Regex.IsMatch(strValue, regexDate))
                {
                    int _IndexY;
                    int _IndexM;
                    int _IndexD;
                    if (-1 != (_IndexY = strValue.IndexOf("-")))
                    {
                        _IndexM = strValue.IndexOf("-", _IndexY + 1);
                        _IndexD = strValue.IndexOf(":");
                    }
                    else
                    {
                        _IndexY = strValue.IndexOf(".");
                        _IndexM = strValue.IndexOf(".", _IndexY + 1);
                        _IndexD = strValue.IndexOf(":");
                    }
                    if (-1 == _IndexM)
                    {
                        result = true;
                        return result;
                    }
                    if (-1 == _IndexD)
                    {
                        _IndexD = strValue.Length + 3;
                    }
                    int iYear = Convert.ToInt32(strValue.Substring(0, _IndexY));
                    int iMonth = Convert.ToInt32(strValue.Substring(_IndexY + 1, _IndexM - _IndexY - 1));
                    int iDate = Convert.ToInt32(strValue.Substring(_IndexM + 1, _IndexD - _IndexM - 4));
                    if ((iMonth < 8 && 1 == iMonth % 2) || (iMonth > 8 && 0 == iMonth % 2))
                    {
                        if (iDate < 32)
                        {
                            result = true;
                            return result;
                        }
                    }
                    else
                    {
                        if (iMonth != 2)
                        {
                            if (iDate < 31)
                            {
                                result = true;
                                return result;
                            }
                        }
                        else
                        {
                            if (iYear % 400 == 0 || (iYear % 4 == 0 && 0 < iYear % 100))
                            {
                                if (iDate < 30)
                                {
                                    result = true;
                                    return result;
                                }
                            }
                            else
                            {
                                if (iDate < 29)
                                {
                                    result = true;
                                    return result;
                                }
                            }
                        }
                    }
                }
                result = false;
            }
            return result;
        }

        public static string CreateNo()
        {
            Random random = new Random();
            string strRandom = random.Next(1000, 10000).ToString();
            return DateTime.Now.ToString("yyyyMMddHHmmss") + strRandom;
        }

        public static string RndNum(int codeNum)
        {
            StringBuilder sb = new StringBuilder(codeNum);
            Random rand = new Random();
            for (int i = 1; i < codeNum + 1; i++)
            {
                int t = rand.Next(9);
                sb.AppendFormat("{0}", t);
            }
            return sb.ToString();
        }

        public static string[] SplitString(string strContent, string strSplit)
        {
            string[] result;
            if (!string.IsNullOrEmpty(strContent))
            {
                if (strContent.IndexOf(strSplit) < 0)
                {
                    result = new string[]
					{
						strContent
					};
                }
                else
                {
                    result = Regex.Split(strContent, Regex.Escape(strSplit), RegexOptions.IgnoreCase);
                }
            }
            else
            {
                result = new string[0];
            }
            return result;
        }

        public static string[] SplitString(string strContent, string strSplit, int count)
        {
            string[] result = new string[count];
            string[] splited = CommonHelper.SplitString(strContent, strSplit);
            for (int i = 0; i < count; i++)
            {
                if (i < splited.Length)
                {
                    result[i] = splited[i];
                }
                else
                {
                    result[i] = string.Empty;
                }
            }
            return result;
        }

        public static string WebPathTran(string path)
        {
            string result;
            try
            {
                result = HttpContext.Current.Server.MapPath(path);
            }
            catch
            {
                result = path;
            }
            return result;
        }
    }
}