using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using FLY.Thick.Base.Common;
using System.Collections.ObjectModel;
using Misc;
using FObjBase.Reflect;
using FObjBase;

namespace FLY.Thick.Base.IService
{
    public interface IScanCorrService : INotifyPropertyChanged
    {
        /// <summary>
        /// 使能修正
        /// </summary>
        bool Enable{set;get;}

        /// <summary>
        /// 当前修正的组
        /// </summary>
        int CurrGroupIndex { get; }
        /// <summary>
        /// 当前进度 0 - 100 
        /// </summary>
        int Progress { get; }

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

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

        /// <summary>
        /// 来回次数
        /// </summary>
        int ScanCnt { get; }

        /// <summary>
        /// 平滑
        /// </summary>
        int SmoothFactor { get; }

        /// <summary>
        /// 开始机架修正
        /// </summary>
        /// <param name="groupIndex">组序号</param>
        /// <param name="scanCnt">扫描次数</param>
        /// <param name="smoothFactor">平滑</param>
        void Start(int groupIndex, int scanCnt, int smoothFactor);

        /// <summary>
        /// 清空组数据
        /// </summary>
        /// <param name="groupIndex"></param>
        void Clear(int groupIndex);

        /// <summary>
        /// 设置修正曲线
        /// </summary>
        /// <param name="groupIndex">组序号</param>
        /// <param name="corrDatas">修正数据</param>
        /// <param name="avg">均值</param>
        /// <param name="orgDatas">原始数据</param>
        void SetCorrData(int groupIndex, int[][] corrDatas, int avg, int[][] orgDatas);

        [Call(typeof(GetScanCorrGroupResponse))]
        void GetScanCorrGroup(int groupIndex, AsyncCBHandler asyncDelegate, object asyncContext);

    }

    public class GetScanCorrGroupResponse
    {
        /// <summary>
        /// 组序号
        /// </summary>
        public int GroupIndex;
        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime UpdateTime;

        /// <summary>
        /// 机架准备好了
        /// </summary>
        public bool IsDataOK;

        /// <summary>
        /// 机架总长，脉冲
        /// </summary>
        public int PosLen;

        /// <summary>
        /// 1个grid = N个pos
        /// </summary>
        public int PosOfGrid;

        /// <summary>
        /// 原始 正反方向机架AD值数据, grid数据
        /// </summary>
        public int[][] OrgDatas;

        /// <summary>
        /// 修正用 正反方向机架AD值数据
        /// </summary>
        public int[][] CorrDatas;

        /// <summary>
        /// CorrDatas 的均值
        /// </summary>
        public int Avg;
    }
    


    

}
