using AIStudio.Wpf.DiagramDesigner;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace AIStudio.Wpf.DiagramDesigner
{
    public class ConectorValueConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (values[0] is LogicalConnectorInfo logicalConnectorInfo)
            {
                if (logicalConnectorInfo.ErrorCode != Enums.ConnectorErrorCode.None)
                {
                    if (parameter?.ToString() == "ToolTip")
                    {
                        return logicalConnectorInfo.ErrorMessage;
                    }
                    else
                    {
                        return logicalConnectorInfo.ErrorCode.ToString();
                    }
                }
                else if (logicalConnectorInfo.ConnectorValueType == ConnectorValueType.Bool)
                {
                    return (logicalConnectorInfo.ConnectorValue == 0) ? "F" : "T";
                }
                else if (logicalConnectorInfo.ConnectorValueType == ConnectorValueType.Int)
                {
                    return logicalConnectorInfo.ConnectorValue.ToString("0");
                }
                else if (logicalConnectorInfo.ConnectorValueType == ConnectorValueType.Real)
                {
                    return logicalConnectorInfo.ConnectorValue.ToString("f3");
                }
                else if (logicalConnectorInfo.ConnectorValueType == ConnectorValueType.JsonString)
                {
                    if (logicalConnectorInfo.ConnectorString != null)
                    {
                        JObject obj = JObject.Parse(logicalConnectorInfo.ConnectorString);
                        if (obj.ContainsKey("Text"))
                        {
                            return obj["Text"].ToString();
                        }
                    }
                }
                else
                {
                    if (parameter?.ToString() == "ToolTip")
                    {
                        return logicalConnectorInfo.ConnectorString;
                    }
                    else
                    {
                        return "...";
                    }
                }
            }
            return null;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
