using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using FObjBase;
using FObjBase.Reflect;

namespace FLY.Thick.Base.IService
{
    public interface IGageInfoService:INotifyPropertyChanged
    {
        /// <summary>
        /// 录制时的速度
        /// </summary>
        UInt32 Velocity { get; }
        /// <summary>
        /// 机架总长，脉冲
        /// </summary>
        int PosLen { get; }

        /// <summary>
        /// 1个grid = N个pos
        /// </summary>
        int PosOfGrid { get; }
        
        /// <summary>
        /// 数据好了！！！！
        /// 当 flyad7 的poslen, posOfGrid 发生变化时，DataOK = false, 需要重新记录。
        /// </summary>
        bool DataOK { get; }

        /// <summary>
        /// 当前进度 0 - 100 
        /// </summary>
        int Progress { get; }

        /// <summary>
        /// 数据更新时间
        /// </summary>
        DateTime[] UpdateTimes { get; }

        /// <summary>
        /// 正在机架修正中
        /// </summary>
        bool IsRunning { get; }

        /// <summary>
        /// 数据录制，记下来回扫描的AD值数组
        /// </summary>
        void Start(UInt32 velocity);

        [Call(typeof(GetGageInfoResponse))]
        void GetGageInfo(int idx, AsyncCBHandler asyncDelegate, object asyncContext);
    }
    public class GageInfoData
    {
        /// <summary>
        /// 正向扫描数据
        /// </summary>
        public int[] ForwData = null;
        /// <summary>
        /// 反向扫描数据
        /// </summary>
        public int[] BackwData = null;
    }
    public class GetGageInfoResponse
    {
        /// <summary>
        /// 0 为 射线正向， 1为射线反向
        /// </summary>
        public int Idx;
        /// <summary>
        /// 扫描数据
        /// </summary>
        public int[] Data = null;

        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime UpdateTime;
    }
}
