using FLY.Thick.Base.IService;
using FObjBase;
using Misc;
using System;

namespace FLY.Thick.Base.Client
{
    /// <summary>
    /// 边界查找服务 客户代理
    /// </summary>
    public class BorderSearchServiceClient : FObjBase.Reflect.Reflect_SeviceClient, IBorderSearchService
    {
        protected override Type InterfaceType => typeof(IBorderSearchService);
        /// <summary>
        /// 边界查找服务 构造
        /// </summary>
        /// <param name="id"></param>
        public BorderSearchServiceClient(UInt32 id) : base(id) { }

        /// <summary>
        /// 边界查找服务 构造
        /// </summary>
        /// <param name="serviceId">服务id</param>
        /// <param name="connName">连接器</param>
        public BorderSearchServiceClient(UInt32 serviceId, string connName) : base(serviceId, connName) { }

        #region IBorderSearchService 成员

        public bool Enable { get; set; }

        /// <summary>
        /// 单一材料，找空气与膜均值的 中间位置
        /// </summary>
        public bool IsOneMaterial { get; set; }

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


        public RangeStruct Valid { get; set; }

        public Range Border_Backw { get; set; } = new Range();

        public Range Border_Forw { get; set; } = new Range();

        public RangeStruct Border { get; set; }


        /// <summary>
        /// 当前膜宽，测量出来的，单位是 脉冲
        /// </summary>
        public int Width { get; set; }


        /// <summary>
        /// 膜中间位置 单位 脉冲
        /// </summary>
        public int Mid { get; set; }

        /// <summary>
        /// 调试数据更新时间
        /// </summary>
        public DateTime UpdateTime { get; set; }
        /// <summary>
        /// 手动设置温修AD值
        /// </summary>
        public bool TempADBySet { get; set; }

        public int TempAD { get; set; }

        public int TempRange { get; set; }

        /// <summary>
        /// 温修范围是温修的百分比
        /// </summary>
        public bool IsTempRangeByPercent { get; set; } = true;

        /// <summary>
        ///  温修范围百分比
        /// </summary>
        public double TempRangePercent { get; set; } = 0.02;


        public int N { get; set; }

        /// <summary>
        /// 探头直径，单位脉冲， 膜宽 = 边界范围 - 探头直径
        /// </summary>
        public int SensorWidth { get; set; }

        public int N2 { get; set; }


        public int N3 { get; set; }

        /// <summary>
        /// 产品宽度，设置值 单位:脉冲
        /// 当膜超过范围（没有经过阀值），就使用它，猜边界在哪
        /// </summary>
        public int ProductWidth { get; set; }

        #endregion

        public void GetView(AsyncCBHandler asyncDelegate, object asyncContext)
        {
            Call(nameof(GetView), null, asyncDelegate, asyncContext);
        }
        public void Apply()
        {
            Call(nameof(Apply));
        }
    }
}
