using UnityEngine;

namespace NBF
{
    public abstract class FishingLineNodeFeature : MonoBehaviour
    {
        /// <summary>
        /// 当前功能组件所属的节点。
        /// </summary>
        public FishingLineNode Node { get; private set; }

        /// <summary>
        /// 当前功能组件所属的鱼线求解器。
        /// </summary>
        public FLine Solver { get; private set; }

        /// <summary>
        /// 将当前功能组件绑定到指定节点和求解器。
        /// </summary>
        public void Bind(FishingLineNode node, FLine solver)
        {
            Node = node;
            Solver = solver;

            if (!IsSupportedNode(node))
            {
                Debug.LogWarning($"{GetType().Name} 不适用于节点 {node.name} 的当前配置。", this);
            }

            OnBind();
        }

        /// <summary>
        /// 当前功能组件是否支持挂在该节点上。
        /// 子类可按节点类型、尾节点类型或产品标识做限制。
        /// </summary>
        public virtual bool IsSupportedNode(FishingLineNode node)
        {
            return node != null;
        }

        /// <summary>
        /// 节点与求解器绑定完成后的回调。
        /// </summary>
        protected virtual void OnBind()
        {
        }

        /// <summary>
        /// 鱼线链路重建完成后的回调。
        /// </summary>
        public virtual void OnLineBuilt()
        {
        }

        /// <summary>
        /// 鱼线达到断线条件后的回调。
        /// </summary>
        public virtual void OnLineBreakRequested()
        {
        }
    }
}