local hs = {}
local healthy = {}

if obj.status ~= nil then
  if obj.status.conditions ~= nil then
    for i, condition in ipairs(obj.status.conditions) do
      if condition.status == "False" then
        healthy.status = "False"
      end
    end
  end

  progressiveFailure = (obj.metadata.labels ~= nil and obj.metadata.labels["numaplane.numaproj.io/progressive-result-state"] == "failed")
  if obj.metadata.generation == obj.status.observedGeneration then
    if (healthy ~= {} and healthy.status == "False") or (obj.status.phase == "Failed") or progressiveFailure then
      hs.status = "Degraded"
      if obj.status.phase == "Failed" then
        hs.message = obj.status.message
      elseif progressiveFailure then
        hs.message = "Failed progressive upgrade"
      else
        hs.message = "Subresources are unhealthy"
      end
      return hs
    elseif obj.status.phase == "Paused" then
      hs.status = "Healthy"
      hs.message = "MonoVertex is paused"
      return hs
    elseif obj.status.phase == "Running" then
      hs.status = "Healthy"
      hs.message = "MonoVertex is healthy"
      return hs
    end
  end
end

hs.status = "Progressing"
hs.message = "Waiting for MonoVertex status"
return hs
