module Webhooks::Outgoing::DeliverySupport

def attempt_count

def attempt_count
  delivery_attempts.count
end

def deliver

def deliver
  # TODO If we ever do away with the `async: true` default for webhook generation, then I believe this needs to
  # change otherwise we'd be attempting the first delivery of webhooks inline.
  if delivery_attempts.create.attempt
    touch(:delivered_at)
  else
    deliver_async
  end
end

def deliver_async

def deliver_async
  if still_attempting?
    Webhooks::Outgoing::DeliveryJob.set(wait: next_reattempt_delay).perform_later(self)
  end
end

def delivered?

def delivered?
  delivered_at.present?
end

def failed?

def failed?
  !(delivered? || still_attempting?)
end

def label_string

def label_string
  event.short_uuid
end

def max_attempts

def max_attempts
  ATTEMPT_SCHEDULE.keys.max
end

def name

def name
  event.short_uuid
end

def next_reattempt_delay

def next_reattempt_delay
  ATTEMPT_SCHEDULE[attempt_count]
end

def still_attempting?

def still_attempting?
  return false if delivered?
  attempt_count < max_attempts
end