using CommunityToolkit.Mvvm.Input;
using LiveCharts;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace FLY.Thick.Base.UI
{
    /// <summary>
    /// 
    /// </summary>
    interface IPgGridVm : INotifyPropertyChanged
    {
        /// <summary>
        /// 目标位置 单位:脉冲
        /// </summary>
        int TargetPos { get; set; }
        /// <summary>
        /// 目标位置 单位:mm
        /// </summary>
        double TargetMm { get; }
        /// <summary>
        /// AD值模式
        /// </summary>
        bool IsADMode { get; set; }

        /// <summary>
        /// 最多6条曲线
        /// </summary>
        ObservableCollection<SeriesInfo> SeriesInfos { get; }
     
        #region 曲线
        Func<double, string> XFormatter { get; }
        Func<double, string> YFormatter { get; }

        double XUpper { get; set; }
        double XLower { get; set; }

        double YUpper { get; set; }
        double YLower { get; set; }

        double XMax { get; }
        double XMin { get; }

        double YMax { get; }
        double YMin { get; }

        double SectionValue { get; }
        double SectionWidth { get; }
        SeriesCollection Series { get; }
        #endregion

        #region 测量
        /// <summary>
        /// 测量开始位置 单位:脉冲
        /// </summary>
        int MeasureValuePos { get; set; }
        /// <summary>
        /// 测量开始位置 单位:mm
        /// </summary>
        double MeasureValueMm { get; }
        /// <summary>
        /// 测量宽度 单位:脉冲
        /// </summary>
        int MeasureWidthPos { get; set; }
        /// <summary>
        /// 测量宽度 单位:mm
        /// </summary>
        double MeasureWidthMm { get; }
        #endregion

        #region command
        RelayCommand RunToCmd { get; }
        RelayCommand GetFDataCmd { get; }
        RelayCommand GetBDataCmd { get; }

        RelayCommand ClearCmd { get; }
        RelayCommand MeasureCmd { get; }
        
        RelayCommand SaveCmd { get; }

        RelayCommand<SeriesInfo> SelectCmd { get; }
        #endregion


        #region 输出使用
        int PosOfGrid { get; }
        double Mmpp { get; }
        #endregion
    }
}
