class BuiltHearthAmenity < ApplicationRecord belongs_to :hearth belongs_to :hearth_amenity validates :hearth_id, uniqueness: { scope: :hearth_amenity_id } def cooldown # TODO: HACK: Update this so multiple use effects will work self.hearth_amenity.whatnot[:use_effects].first[:cooldown] end def usable? self.hearth_amenity.whatnot[:use_effects].present? end def on_cooldown? if usable? && cooldown.present? # If it's never been used, it's off cooldown return false unless self.last_used_at seconds_until_cooled_down > 0 else false end end def seconds_until_cooled_down return nil unless usable? seconds_until_cooled_down = cooldown - (Time.now - self.last_used_at) [0, seconds_until_cooled_down].max end def effects self.hearth_amenity.whatnot[:effects]&.reject { |e| e[:level] > self.level } end end