using System.Collections.Generic;
using System.Linq;
using IvfTl.Control.Entity.InitEntitys;
namespace ivf_tl_Control
{
///
/// 启动期坏舱决策(无 I/O,纯函数,可单测)。
/// 规则:坏舱=故障清单中已知舱号(HouseSn>0);可跑舱=发现的舱−坏舱;致命=零可跑舱。
/// 单舱/部分舱坏绝不致命 —— 落实 spec §34。
///
public static class StartupFaultPolicy
{
public static HashSet BadHouseSns(IEnumerable faults)
=> faults.Where(f => f.HouseSn > 0).Select(f => f.HouseSn).ToHashSet();
public static List RunnableHouses(IEnumerable discovered, IEnumerable faults)
{
var bad = BadHouseSns(faults);
return discovered.Where(sn => !bad.Contains(sn)).Distinct().OrderBy(x => x).ToList();
}
public static bool IsFatal(IReadOnlyList runnableHouses)
=> runnableHouses == null || runnableHouses.Count == 0;
}
}