using System;

namespace Hitsuji.Framework.Utils
{
    public class ValueUtil
    {
        /// <summary>
        /// String型の値を取得する
        /// </summary>
        /// <param name="value"></param>
        /// <param name="tempValue"></param>
        /// <returns></returns>
        public static string tryGetString(object value, string tempValue = "")
        {
            try
            {
                string returnValue = value.ToString();
                return returnValue;
            }
            catch (Exception ex)
            {
                return tempValue;
            }
        }

        /// <summary>
        /// 指定した位置(0空始まるインデックス)の文字を取得する
        /// インデックスが不正な場合はカラ文字を取得する
        /// </summary>
        /// <param name="value"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public static string getAsStringIndexOf(object value, int index)
        {
            int target = index + 1;
            if (value == null || value == DBNull.Value || index < 0) return "";
            return value.ToString().Length < target ? "" : value.ToString().Substring(index, 1);
        }

        /// <summary>
        /// Bool型の値を取得する
        /// </summary>
        /// <param name="value"></param>
        /// <param name="tempValue"></param>
        /// <returns></returns>
        public static bool tryGetBool(object value, bool tempValue = false)
        {
            try
            {
                string valueText = value.ToString();
                bool returnValue = bool.Parse(valueText);
                return returnValue;
            }
            catch (Exception ex)
            {
                return tempValue;
            }
        }

        /// <summary>
        /// int型の値を取得する
        /// </summary>
        /// <param name="value"></param>
        /// <param name="tempValue"></param>
        /// <returns></returns>
        public static double tryGetNum(object value, double tempValue = -1)
        {
            try
            {
                if (value == null)
                {
                    throw new Exception();
                }

                //int valueInt = value.Value;
                return tempValue;
            }
            catch (Exception ex)
            {
                return tempValue;
            }
        }
    }
}
