using System;
using StandardScene.Signal.Model;
namespace StandardScene.Signal.Logic
{
///
/// 一条握手点配置的解析结果。参数格式与反编译 SignalStop.SignalParams 一致。
///
///
/// 按分号切成 ,缺段时 返回空串。
/// 各类型约定:
///
/// - JGControl:机构名;RequestIn|Arrived;[区域-车组-限额-点列表]
/// - PointControl:UP1|UP2|Down1|Down2;机构名
/// - TimedCharging:最长秒数;上限电量;下限电量
/// - RateFlowControl:区域;车组;限额;点1,点2
///
///
public sealed class SignalStopSpec
{
/// 握手类型名,与 Handler 的 比较时忽略大小写。
public string SignalType { get; init; } = "";
/// 原始参数串,限流独立类型会整段交给 。
public string SignalParams { get; init; } = "";
/// 按 ';' 切分,保留空段(与 Split None 一致,方便 Part(n) 按下标取)。
public string[] Parts { get; init; } = Array.Empty();
/// 取第 段;越界或 null 返回空串。
public string Part(int index)
{
if (index < 0 || index >= Parts.Length)
return "";
return Parts[index] ?? "";
}
/// 从类型名和参数串构造;类型会 Trim,参数保持原样以便日志对照现场 JSON。
public static SignalStopSpec Parse(string signalType, string signalParams)
{
var type = (signalType ?? "").Trim();
var raw = signalParams ?? "";
return new SignalStopSpec
{
SignalType = type,
SignalParams = raw,
Parts = raw.Split(new[] { ';' }, StringSplitOptions.None)
};
}
/// 从握手点 Model 构造;model 为 null 时返回 null。
public static SignalStopSpec From(HandshakePointModel model)
{
if (model == null)
return null;
return Parse(model.SignalType, model.SignalParams);
}
/// 类型名是否匹配(忽略大小写)。
public bool Is(string type) =>
string.Equals(SignalType, type, StringComparison.OrdinalIgnoreCase);
}
}