using Plane.CopterManagement;
using Plane.Messaging;

namespace Plane.CopterControllers
{
    /// <summary>
    /// 利用特定方式控制飞行器的控制器的基类。子类应该通过响应事件/消息来控制飞行器，而不是提供 public 方法。
    /// </summary>
    public abstract class CopterControllerBase
    {
        /// <summary>
        /// 表示左右转弯的中间值（即通道2的值，通道2的取值范围为1100~1900），小于中间值为向前，大于中间值为向后。
        /// </summary>
        protected const ushort PitchMedianValue = 1500;

        /// <summary>
        /// 表示左右转弯的中间值（即通道1的值，通道1的取值范围为1100~1900），小于中间值为转左，大于中间值为转右。
        /// </summary>
        protected const ushort RollMedianValue = 1500;

        protected ICopterManager _copterManager;

        protected IPLMessenger _messenger;

        protected CopterControllerBase(IPLMessenger messenger, ICopterManager copterManager)
        {
            _messenger = messenger;
            _copterManager = copterManager;
        }

        /// <summary>
        /// 获取或设置一个值，指示是否激活此控制器。
        /// </summary>
        public virtual bool IsEnabled { get; set; }

        public abstract CopterControllerTypes Type { get; }
    }
}
