using System;
using System.ComponentModel;
using System.Globalization;
namespace DevComponents.Charts.Design
{
    /// 
    /// Represents PointValueConverter converter.
    /// 
    public class PointValueConverter : TypeConverter
    {
        public PointValueConverter()
        {
        }
        #region CanConvertTo
        public override bool CanConvertFrom(
            ITypeDescriptorContext context, Type sourceType)
        {
            if (sourceType == typeof(string))
                return true;
            return base.CanConvertFrom(context, sourceType);
        }
        #endregion
        #region CanConvertTo
        public override bool CanConvertTo(
            ITypeDescriptorContext context, Type destinationType)
        {
            if (destinationType == typeof(string))
                return true;
            return base.CanConvertTo(context, destinationType);
        }
        #endregion
        #region ConvertFrom
        public override object ConvertFrom(
            ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value is string)
                return (GetConvertedValue((string)value));
            return base.ConvertFrom(context, culture, value);
        }
        #region GetConvertedValue
        private object GetConvertedValue(string text)
        {
            string s = text.Trim();
            if (text.Length == 0)
                return (null);
            if (s.StartsWith("\"") && s.EndsWith("\""))
                return (s.Substring(1, s.Length - 2));
            int intResult;
            if (int.TryParse(text, out intResult) == true)
                return (intResult);
            double dblResult;
            if (double.TryParse(text, out dblResult) == true)
                return (dblResult);
            DateTime dtResult;
            if (DateTime.TryParse(text, out dtResult) == true)
                return (dtResult);
            return (text);
        }
        #endregion
        #endregion
        #region ConvertTo
        public override object ConvertTo(
            ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            if (value != null)
            {
                if (destinationType == typeof(string))
                {
                    if (value == null)
                        return ("");
                    if (value is string)
                        return ("\"" + value + "\"");
                    if (value is int)
                        return (value.ToString());
                    if (value is DateTime)
                        return (value.ToString());
                    return (String.Format("{0:0.0###############}", value));
                }
            }
            return (string.Empty);
        }
        #endregion
    }
}