// Private diagnostic injected only into the frozen test addon.
modded class SCR_BaseItemSupportStationComponent
{
 protected int m_ERRFixtureAdds;
 protected int m_ERRFixtureRemoves;
 protected int m_ERRFixtureResourceCalls;
 protected override void AddRemoveOnDamageStateChanged(IEntity owner, bool subscribe)
 {
  super.AddRemoveOnDamageStateChanged(owner, subscribe);
  if (subscribe) m_ERRFixtureAdds++;
  else m_ERRFixtureRemoves++;
 }
 protected override void TEMP_OnInteractorReplicated()
 {
  m_ERRFixtureResourceCalls++;
  super.TEMP_OnInteractorReplicated();
 }
 void ERR_FixtureCatalogLoss() { m_EntityCatalogManager = null; }
 void ERR_FixtureResourceEvent()
 {
  SCR_ResourceComponent resource = GetResourceComponent();
  if (resource) resource.TEMP_GetOnInteractorReplicated().Invoke();
 }
 bool ERR_FixtureReady() { return m_EntityCatalogManager != null && m_ERRFixtureAdds == 1; }
 int ERR_FixtureRemoves() { return m_ERRFixtureRemoves; }
 int ERR_FixtureCalls() { return m_ERRFixtureResourceCalls; }
}
modded class ArmaReforgerScripted
{
 protected int m_ERRFixtureStage;
 protected float m_ERRFixtureWait;
 protected IEntity m_ERRFixtureKit;
 protected SCR_BaseItemSupportStationComponent m_ERRFixtureStation;
 protected int m_ERRFixtureFailures;
 protected void ERR_FixtureCheck(bool pass, string label)
 {
  if (!pass) m_ERRFixtureFailures++;
  if (pass) Print("ERR CATALOG DIAG PASS: " + label);
  else Print("ERR CATALOG DIAG FAIL: " + label);
 }
 protected IEntity ERR_FixtureSpawnKit()
 {
  EntitySpawnParams params = new EntitySpawnParams(); params.TransformMode = ETransformMode.WORLD;
  params.Transform[3] = "6000 200 7000";
  return SpawnEntityPrefab(Resource.Load("{AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et"), GetWorld(), params);
 }
 override void OnUpdate(BaseWorld world, float timeslice)
 {
  super.OnUpdate(world, timeslice);
  if (m_ERRFixtureStage == 3 || !ERR_GameMode.Get() || !ERR_GameMode.Get().Active()) return;
  m_ERRFixtureWait += timeslice;
  if (m_ERRFixtureWait < 2) return;
  m_ERRFixtureWait = 0;
  if (m_ERRFixtureStage == 0)
  {
   IEntity transientKit = ERR_FixtureSpawnKit();
   ERR_FixtureCheck(transientKit != null, "real transient kit spawned before delayed initialization");
   if (transientKit) SCR_EntityHelper.DeleteEntityAndChildren(transientKit);
   m_ERRFixtureKit = ERR_FixtureSpawnKit();
   if (m_ERRFixtureKit) m_ERRFixtureStation = SCR_BaseItemSupportStationComponent.Cast(m_ERRFixtureKit.FindComponent(SCR_BaseItemSupportStationComponent));
   ERR_FixtureCheck(m_ERRFixtureStation != null, "real item support station spawned");
   m_ERRFixtureStage = 1;
   return;
  }
  if (m_ERRFixtureStage == 1)
  {
   if (m_ERRFixtureStation)
   {
    ERR_FixtureCheck(m_ERRFixtureStation.ERR_FixtureReady(), "native catalog and damage subscription initialized");
    int beforeCalls = m_ERRFixtureStation.ERR_FixtureCalls();
    m_ERRFixtureStation.ERR_FixtureResourceEvent();
    int calls = m_ERRFixtureStation.ERR_FixtureCalls();
    ERR_FixtureCheck(calls == beforeCalls + 1, "real resource callback subscribed before cleanup");
    SCR_EntityCatalogManagerComponent globalCatalog = SCR_EntityCatalogManagerComponent.GetInstance();
    m_ERRFixtureStation.ERR_FixtureCatalogLoss();
    m_ERRFixtureStation.OnDelete(m_ERRFixtureKit);
    m_ERRFixtureStation.OnDelete(m_ERRFixtureKit);
    ERR_FixtureCheck(m_ERRFixtureStation.ERR_FixtureRemoves() == 1, "catalog loss cleanup detaches damage once across duplicate delete callbacks");
    m_ERRFixtureStation.ERR_FixtureResourceEvent();
    ERR_FixtureCheck(m_ERRFixtureStation.ERR_FixtureCalls() == calls, "native resource callback detached even on non-range kit");
    ERR_FixtureCheck(globalCatalog && globalCatalog == SCR_EntityCatalogManagerComponent.GetInstance(), "global catalog unchanged by kit-local fault injection");
   }
   if (m_ERRFixtureKit) SCR_EntityHelper.DeleteEntityAndChildren(m_ERRFixtureKit);
   m_ERRFixtureKit = null; m_ERRFixtureStation = null;
   m_ERRFixtureStage = 2;
   return;
  }
  m_ERRFixtureStage = 3;
  PrintFormat("ERR CATALOG DIAG COMPLETE failures=%1", m_ERRFixtureFailures);
 }
}
