using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using FLY.FeedbackRenZiJia.Common;
using System.Net;
using ThickTcpUiInWindow;
using FLY.FeedbackRenZiJia.IService;
using System.ComponentModel;

namespace FLY.FeedbackRenZiJia.UI.Client
{
    /// <summary>
    /// Page_Setup.xaml 的交互逻辑
    /// </summary>
    public partial class Page_Setup : Page
    {
        FLY.FeedbackRenZiJia.Client.FeedbackHeatServiceClient mFeedback;
        FLY.FeedbackRenZiJia.Client.HeatBufServiceClient mHeatBuf;
        FLY.FeedbackRenZiJia.Client.HeatCellServiceClient mHeatCell;
        public Page_Setup()
        {
            InitializeComponent();
        }
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            SysParam sysparam = SysParam.Current;
            IPEndPoint ep = sysparam.ServerEP;
            mFeedback = new FeedbackRenZiJia.Client.FeedbackHeatServiceClient(FLY.FeedbackRenZiJia.OBJ_INTERFACE.OBJ_INTERFACE_ID.FEEDBACK_ID);
            mHeatBuf = new FeedbackRenZiJia.Client.HeatBufServiceClient(FLY.FeedbackRenZiJia.OBJ_INTERFACE.OBJ_INTERFACE_ID.HEATBUF_ID);
            mHeatCell = new FeedbackRenZiJia.Client.HeatCellServiceClient(FLY.FeedbackRenZiJia.OBJ_INTERFACE.OBJ_INTERFACE_ID.HEATCELL_ID);

            FObjBase.FObjSys.Current.Connect_to_Another_OBJSys(ep,
                mFeedback.ID,
                mHeatBuf.ID,
                mHeatCell.ID);
            this.grid_feedback.DataContext = mFeedback;
            this.grid_heatbuf.DataContext = mHeatBuf;
            this.grid_heatcell.DataContext = mHeatCell;
            
        }
        private void Page_Unloaded(object sender, RoutedEventArgs e)
        {
            mFeedback.Dispose();
            mHeatBuf.Dispose();
            mHeatCell.Dispose();
        }
        private void button_back_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.GoBack();
        }

        bool CheckValid_HeatEffectCurve()
        {
            List<int> list = mHeatBuf.HeatEffectCurve;

            if ((list == null) || (list.Count() == 0))
            {
                FLY.ControlLibrary.Window_WarningTip.Show(
                    "参数异常", "加热效果为空", TimeSpan.FromSeconds(2));
                return false;
            }
            int cnt = list.Count();
            if ((int)(cnt / 2) * 2 == cnt)
            {
                FLY.ControlLibrary.Window_WarningTip.Show(
                    "参数异常", "加热效果格式出错,应该如2,5,8,5,2", TimeSpan.FromSeconds(2));
                return false;
            }
            for (int i = 0; i < list.Count() / 2; i++)
            {
                int idx0 = i;
                int idx_0 = list.Count() - 1 - idx0;
                if (list[idx0] != list[idx_0])
                {
                    FLY.ControlLibrary.Window_WarningTip.Show(
                        "参数异常", "加热效果格式出错,应该如2,5,8,5,2", TimeSpan.FromSeconds(2));
                    return false;
                }
                int idx1 = idx0 + 1;
                if (list[idx0] > list[idx1])
                {
                    FLY.ControlLibrary.Window_WarningTip.Show(
                        "参数异常", "加热效果格式出错,应该如2,5,8,5,2", TimeSpan.FromSeconds(2));
                    return false;
                }
            }
            return true;
        }
        bool CheckValid()
        {
            if (CheckValid_HeatEffectCurve() == false)
                return false;
            return true;
        }
        private void button_apply_oNo_Click(object sender, RoutedEventArgs e)
        {
            if (Window_Password.Authorize(1))
            {
                if (CheckValid())
                {
                    mHeatBuf.Apply();
                    mHeatCell.Apply();

                    FLY.ControlLibrary.Window_Tip.Show("参数设置", "成功", TimeSpan.FromSeconds(2));
                }
            }
        }
        
        private void button_apply_Click(object sender, RoutedEventArgs e)
        {
            if (Window_Password.Authorize(1))
            {
                if (CheckValid())
                {
                    mHeatBuf.Apply();
                    mHeatCell.Apply();
                    mFeedback.Apply();
                    FLY.ControlLibrary.Window_Tip.Show("参数设置", "成功", TimeSpan.FromSeconds(2));
                }
            }
        }
        private void button_smooth_Click(object sender, RoutedEventArgs e)
        {
            mHeatCell.Smooth();
        }
    }
    
    public class HeatEffectConverter : IValueConverter
    {
        #region IValueConverter 成员

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            List<int> list = value as List<int>;
            if (list == null)
            {
                return null;
            }
            string str = "";
            for (int i = 0; i < list.Count(); i++)
            {
                if (i == 0)
                    str += list[i].ToString();
                else
                    str += "," + list[i].ToString();
            }
            return str;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string str = value as string;
            if (string.IsNullOrEmpty(str))
            {
                //不合法
                return null;
            }
            string[] ss = str.Split(',');
            List<int> list = new List<int>();
            for (int i = 0; i < ss.Length; i++)
            {
                int num;
                if (int.TryParse(ss[i], out num))
                {
                    list.Add(num);
                }
            }
            return list;
        }

        #endregion
    }
    public class TimeSpan2SecondConverter : IValueConverter
    {
        #region IValueConverter 成员

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            TimeSpan ts = (TimeSpan)value;
            return (int)(ts.TotalSeconds);
        }

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

        #endregion
    }
    public class StableConverter : IValueConverter
    {
        #region IValueConverter 成员

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            STABILITY stable = (STABILITY)value;
            switch (stable)
            {
                case STABILITY.IDLE:
                    return "等待";
                case STABILITY.ERROR_NO_ARRIVE:
                    return "等待:加热点还没到达测厚仪";
                case STABILITY.ERROR_POSITION_NOTSURE:
                    return "等待:位置不能确定";
                case STABILITY.ERROR_SIGMA_OVERSIZE:
                    return "等待:2σ太大 ";
                case STABILITY.ERROR_ROTATE_CHANGED:
                    return "等待:旋转速度波动大 ";
                case STABILITY.ERROR_THICK_CHANGED:
                    return "等待:厚度均值波动大";
                case STABILITY.ERROR_CORREL:
                    return "等待:相关性不够";
                case STABILITY.OK_CORREL:
                    return "稳定:相关性高";
                case STABILITY.OK_HEAT_AND_THICK_CORREL:
                    return "稳定:加热相关性高";
                default:
                    return "???";
            }
        }

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

        #endregion
    }
    public class AutoONoResultConverter : IValueConverter
    {
        #region IValueConverter 成员

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            EAutoONoResult stable = (EAutoONoResult)value;
            switch (stable)
            {
                case EAutoONoResult.OK:
                    return "完成:对位成功";
                case EAutoONoResult.Idle:
                    return "等待";
                case EAutoONoResult.Err_Break:
                    return "完成:异常, 数据异常或打断";
                case EAutoONoResult.Err_MaxMin:
                    return "完成:异常, 极差值不够大,可信度不够";
                case EAutoONoResult.Err_MaxR:
                    return "完成:异常, 相关性不够大,可信度不够";
                default:
                    return "???";
            }
        }

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

        #endregion
    }
    public class Direction2VisableConverter : IValueConverter
    {
        #region IValueConverter 成员

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            Misc.DIRECTION direction = (Misc.DIRECTION)value;
            string str = (string)parameter;

            str = str.ToUpper();

            if ((str.CompareTo("FORW") == 0) && (direction == Misc.DIRECTION.FORWARD))
            {
                return System.Windows.Visibility.Visible;
            }
            else if ((str.CompareTo("BACKW") == 0) && (direction == Misc.DIRECTION.BACKWARD))
            {
                return System.Windows.Visibility.Visible;
            }
            else
                return System.Windows.Visibility.Collapsed;
        }

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

        #endregion
    }
}