using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace DeviceLibrary
{
    public abstract class Node
    {

        /// <summary>
        /// 节点名称
        /// </summary>
        public string Name { get;}
        /// <summary>
        /// 节点IP
        /// </summary>
        public string IP { get; }
        /// <summary>
        /// 在线状态
        /// </summary>
        public bool Online { get; set; }
        /// <summary>
        /// 是否可调用
        /// </summary>
        public bool IsUse { set; get; }
        /// <summary>
        /// 节点状态
        /// </summary>
        protected eNodeStatus nodeStatus;

        public Node(string name,string ip,bool isUse=false)
        {
            Name = name;
            IP = ip;
            Online = false;
            IsUse = isUse;
            nodeStatus = eNodeStatus.None;
        }

        public Node(string name)
        {
            Name = name;
        }
        /// <summary>
        /// 状态比较
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public bool StateEquals(eNodeStatus obj)
        {
            return nodeStatus.Equals(obj);
        }
        /// <summary>
        /// 获取当前状态
        /// </summary>
        /// <returns></returns>
        public eNodeStatus GetState()
        {
            return nodeStatus;
        }
        /// <summary>
        /// 更新节点状态
        /// </summary>
        /// <param name="status"></param>
        public void UpdateNodeStatus(eNodeStatus status)
        {
            nodeStatus = status;
        }

        public virtual Job GetNewJob(Agv_Info currentAgvBean)
        {
            return null;
        }

    }
    /// <summary>
    /// 节点状态
    /// </summary>
    public enum eNodeStatus : byte
    {
        /// <summary>
        /// 没有动作
        /// </summary>
        None = 0,
        /// <summary>
        /// 需要7寸D料架
        /// </summary>
        NeedD = 1,
        /// <summary>
        /// 需要大尺寸C料架
        /// </summary>
        NeedC = 2,
        /// <summary>
        /// 需要进入料架
        /// </summary>
        NeedEnter = 3,
        /// <summary>
        /// 需要出去料架
        /// </summary>
        NeedLeave = 4,
        /// <summary>
        /// 需要进入离开料架
        /// </summary>
        NeedEnterLeave = 5,
        /// <summary>
        /// 准备进入料架,服务器发送
        /// </summary>
        ReadyEnter = 6,
        /// <summary>
        /// 可以进入料架
        /// </summary>
        MayEnter = 7,
        /// <summary>
        /// 完成进入料架
        /// </summary>
        FinishEnter = 8,
        /// <summary>
        /// 准备离开料架,服务器发送
        /// </summary>
        ReadyLeave = 9,
        /// <summary>
        /// 可以出去料架
        /// </summary>
        MayLeave = 10,
        /// <summary>
        /// 完成出去料架
        /// </summary>
        FinishLeave = 11,

    }

    /// <summary>
    /// 客户端的优先级
    /// </summary>
    public enum ClientLevel : byte
    {
        /// <summary>
        /// 低
        /// </summary>
        Low = 0,
        /// <summary>
        /// 中等
        /// </summary>
        Middle = 1,
        /// <summary>
        /// 高
        /// </summary>
        High = 2
    }
}