module Archivable
  extend ActiveSupport::Concern

  included do
    scope :active, -> { where("updated_at > ?", Config.active_threshold_date) }
    scope :inactive, -> { where(updated_at: Config.inactive_date_range) }
    scope :archived, -> { where("updated_at < ?", Config.archive_threshold_date) }

    def archive_status
      if updated_at > Config.active_threshold_date
        :active
      elsif updated_at.between? Config.archive_threshold_date, Config.active_threshold_date
        :inactive
      else
        :archived
      end
    end

    private

    class Config
      ACTIVE_THRESHOLD_IN_DAYS   = 90
      ARCHIVE_THRESHOLD_IN_DAYS  = 365

      class << self
        def active_threshold_date
          ACTIVE_THRESHOLD_IN_DAYS.days.ago.beginning_of_day
        end

        def archive_threshold_date
          ARCHIVE_THRESHOLD_IN_DAYS.days.ago.end_of_day
        end

        def inactive_date_range
          archive_threshold_date..active_threshold_date
        end
      end
    end
  end
end
