using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using Aitex.Core.UI.ControlDataContext;
using System.Windows.Media;

namespace Aitex.Core.UI.Converters
{
    public class MFC4ContentConvert : IMultiValueConverter
    {
        public object Convert(object[] FlowMOSourceDataList, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string content = "";
            AnalogDeviceDataItem mfcSourceData = FlowMOSourceDataList[0] as AnalogDeviceDataItem;
            AnalogDeviceDataItem mfcInjectData = FlowMOSourceDataList[1] as AnalogDeviceDataItem;
            AnalogDeviceDataItem mfcDiluteData = FlowMOSourceDataList[2] as AnalogDeviceDataItem;

            if (mfcSourceData != null)
            {
               
                bool isAirFlowMultiControlMFC = (bool)(FlowMOSourceDataList[3]);

                if (isAirFlowMultiControlMFC && mfcInjectData != null && mfcDiluteData!=null)
                {
                    if (mfcSourceData == null) return content;
                    var source = mfcSourceData.FeedBack;
                    var inject = mfcInjectData.FeedBack;
                    var dilute = mfcDiluteData.FeedBack;

                    var flow = source + dilute;
                    if (flow == 0)
                    {
                        content = "0.00";
                    }
                    else
                    {
                        double val = ((source * inject) / flow);
                        content = val >= 10 ? val.ToString("0.0") : val.ToString("0.00");
                    }

                }
                else
                {
                    if (mfcSourceData == null) content = "-";
                    else if (mfcSourceData.FeedBack >= 10000)
                        content = mfcSourceData.FeedBack.ToString("F0");
                    else if (mfcSourceData.FeedBack >= 10)
                        content = mfcSourceData.FeedBack.ToString("0.0");
                    else
                        content = mfcSourceData.FeedBack.ToString("0.00");

                }
            }

            return content;
        }

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

    public class MFC4ColorConvert : IMultiValueConverter
    {
        public object Convert(object[] FlowMOSourceDataList, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            SolidColorBrush borderBrush = Brushes.Transparent;

            AnalogDeviceDataItem mfcSourceData = FlowMOSourceDataList[0] as AnalogDeviceDataItem;
            AnalogDeviceDataItem mfcInjectData = FlowMOSourceDataList[1] as AnalogDeviceDataItem;
            AnalogDeviceDataItem mfcDiluteData = FlowMOSourceDataList[2] as AnalogDeviceDataItem;

            if (mfcSourceData != null)
            {

                bool isAirFlowMultiControlMFC = (bool)(FlowMOSourceDataList[3]);

                if (isAirFlowMultiControlMFC && mfcInjectData != null && mfcDiluteData != null)
                {
                    if (mfcSourceData.IsWarning) { borderBrush = Brushes.Red; }
                    if (mfcInjectData.IsWarning) { borderBrush = Brushes.Red; }
                    if (mfcDiluteData.IsWarning) { borderBrush = Brushes.Red; }

                }
                else
                {
                    if (mfcSourceData != null && mfcSourceData.IsWarning) { borderBrush = Brushes.Red; }

                }
            }

            return borderBrush;
        }

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

    public class MFC4ToolTipConvert : IMultiValueConverter
    {
        public object Convert(object[] FlowMOSourceDataList, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            StringBuilder tooltip = new StringBuilder();

            AnalogDeviceDataItem mfcSourceData = FlowMOSourceDataList[0] as AnalogDeviceDataItem;
            AnalogDeviceDataItem mfcInjectData = FlowMOSourceDataList[1] as AnalogDeviceDataItem;
            AnalogDeviceDataItem mfcDiluteData = FlowMOSourceDataList[2] as AnalogDeviceDataItem;

            if (mfcSourceData != null)
            {

                bool isAirFlowMultiControlMFC = (bool)(FlowMOSourceDataList[3]);

                if (isAirFlowMultiControlMFC && mfcInjectData != null && mfcDiluteData != null)
                {
                    if (mfcSourceData.IsWarning) { tooltip.AppendLine(string.Format("mfc:{0},设备名:{1} 报警! 流量:{2}", mfcSourceData.DeviceId, mfcSourceData.DeviceName, mfcSourceData.FeedBack.ToString("F1"))); }
                    if (mfcInjectData.IsWarning) { tooltip.AppendLine(string.Format("mfc:{0},设备名:{1} 报警! 流量:{2}", mfcInjectData.DeviceId, mfcInjectData.DeviceName, mfcInjectData.FeedBack.ToString("F1"))); }
                    if (mfcDiluteData.IsWarning) { tooltip.AppendLine(string.Format("mfc:{0},设备名:{1} 报警! 流量:{2}", mfcDiluteData.DeviceId, mfcDiluteData.DeviceName, mfcDiluteData.FeedBack.ToString("F1"))); }

                }
                else
                {
                    if (mfcSourceData != null && mfcSourceData.IsWarning) { tooltip.AppendLine(string.Format("mfc:{0},设备名:{1} 报警! 流量:{2}", mfcSourceData.DeviceId, mfcSourceData.DeviceName, mfcSourceData.FeedBack.ToString("F1"))); }

                }
            }

            return tooltip;
        }

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