namespace StandardScene.Signal.Model
{
    /// <summary>
    /// PLC → 调度：读字节含义。对齐反编译 <c>ENUM_READ_SIGNAL</c>。
    /// 机构用这一个字节告诉 AGV 现在能不能进、能不能出。
    /// </summary>
    public enum SignalReadValue : byte
    {
        /// <summary>0：空闲 / 未允许。RequestIn 必须看到写字节也是无状态才放行。</summary>
        无状态 = 0,

        /// <summary>1：允许进入机构。扫车 RequestIn 的放行条件之一。</summary>
        允许进入 = 1,

        /// <summary>2：允许离开机构。下线升销钉、等待通行机构、PointControl 等会等这个值。</summary>
        允许离开 = 2
    }

    /// <summary>
    /// 调度 → PLC：写字节含义。对齐反编译 <c>ENUM_WRITE_SIGNAL</c>。
    /// AGV 用这一个字节向机构汇报当前处于进站流程的哪一步。
    /// </summary>
    public enum SignalWriteValue : byte
    {
        /// <summary>0：空闲。离站清空后回到此值，下一辆才能 RequestIn。</summary>
        无状态 = 0,

        /// <summary>1：已获准进入、正在往机构开。RequestIn 成功时写入。</summary>
        进入中 = 1,

        /// <summary>2：已到达机构内地标。Arrived 或上线 AutoLeave 检测到离开进入包含区时写入。</summary>
        到位 = 2,

        /// <summary>3：正在离开机构。上线看到车在跑、下线/等待通行启动后写入。</summary>
        离开中 = 3,

        /// <summary>4：已离开包含地标。PLC 确认后调度清零写字节和车号。</summary>
        已离开 = 4
    }

    /// <summary>
    /// 西门子系列，名称与 IoTClient <c>SiemensVersion</c> 对齐（不含 <c>None</c>）。
    /// 机构表选「跟随进程」时用信号交互进程的 <c>PlcVersion</c>。
    /// </summary>
    public enum SignalPlcType : byte
    {
        /// <summary>0：未单独指定，建连时用进程字段 PlcVersion。</summary>
        跟随进程 = 0,

        /// <summary>S7-1500，现场最常见。</summary>
        S7_1500 = 1,

        /// <summary>S7-1200。</summary>
        S7_1200 = 2,

        /// <summary>S7-300。</summary>
        S7_300 = 3,

        /// <summary>S7-400。</summary>
        S7_400 = 4,

        /// <summary>S7-200 Smart。</summary>
        S7_200Smart = 5,

        /// <summary>S7-200。</summary>
        S7_200 = 6
    }

    /// <summary>
    /// 机构类型。对齐反编译 <c>ENUM_JGTYPE</c>。
    /// 决定 <see cref="StandardScene.Signal.Plc.PlcStationLogic.AutoLeave"/> 走哪套离站，以及 RequestIn 要不要查机构内是否有车。
    /// </summary>
    public enum SignalLineType : byte
    {
        /// <summary>0：未配置，AutoLeave 不处理。</summary>
        未知 = 0,

        /// <summary>1：上线。进站靠扫车 RequestIn/Arrived，离站跟车位自动推进到位/离开中/已离开。</summary>
        上线机构 = 1,

        /// <summary>2：单牵引下线。RequestIn 时若 JgPointId 上已有车则不放行；离站要升销钉1。</summary>
        单牵引下线机构 = 2,

        /// <summary>3：双牵引下线。同单牵引，离站还需销钉2到位。</summary>
        双牵引下线机构 = 3,

        /// <summary>4：等待通行。无销钉，允许离开后停充启动即可。</summary>
        等待通行机构 = 4
    }
}
