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

namespace FLY.Thick.Base.IService
{
    
    public interface IBorderSearchService:INotifyPropertyChanged
    {
        /// <summary>
        /// 启动与否
        /// </summary>
        bool Enable{get;set;}

        /// <summary>
        /// 边界拐点检测，找到的边界更加精确
        /// </summary>
        bool IsBreakDetect { get; set; }

        /// <summary>
        /// 有限范围
        /// </summary>
        Range Valid{get;}
        /// <summary>
        /// 反向边界
        /// </summary>
        Range Border_Backw{get;}
        /// <summary>
        /// 正向边界
        /// </summary>
        Range Border_Forw{get;}
        /// <summary>
        /// 当前膜宽，测量出来的，单位是 脉冲
        /// </summary>
        int Width { get; }
        /// <summary>
        /// 膜中间位置 单位 脉冲
        /// </summary>
        int Mid { get; }
        /// <summary>
        /// 手动设置温修AD值
        /// </summary>
        bool TempADBySet { set; get; }
        /// <summary>
        /// 温修AD值
        /// </summary>
        int TempAD{get;set;}

        /// <summary>
        /// AD超过了范围， 就认为开始找到边界
        /// </summary>
        int TempRange{get;set;}
        /// <summary>
        /// 温修范围是温修的百分比
        /// </summary>
        bool IsTempRangeByPercent { get; set; }

        /// <summary>
        ///  温修范围百分比
        /// </summary>
        double TempRangePercent { get; set; }
        /// <summary>
        /// 有滤波器，只有非空的连续N个pos以上，才开始算边界开始
        /// </summary>
        int N{get;set;}

        /// <summary>
        /// 探头直径，单位脉冲， 膜宽 = 边界范围 - 探头直径
        /// </summary>
        int SensorWidth { get; set; }
        
        /// <summary>
        /// 找到边界后，边界 + 探头半径  + N2个脉冲。 这个是数据有效的开始
        /// </summary>
        int N2{get;set;}

        /// <summary>
        /// 记录两个边界以后扫描，以它们再外扩N3个脉冲，作为扫描范围 
        /// </summary>
        int N3{get;set;}

        /// <summary>
        /// 用于调试， 进入到边界查找的数据
        /// </summary>
        int[] Datas { get; }


        /// <summary>
        /// 应该 及 保存
        /// </summary>
        void Apply();
    }
}
