# frozen_string_literal: true

module Reports::DailyEngagedUsers
  extend ActiveSupport::Concern

  class_methods do
    def report_daily_engaged_users(report)
      report.average = true

      report.data = []

      data = UserAction.count_daily_engaged_users(report.start_date, report.end_date)

      if report.facets.include?(:prev30Days)
        prev30DaysData =
          UserAction.count_daily_engaged_users(report.start_date - 30.days, report.start_date)
        report.prev30Days = prev30DaysData.sum { |k, v| v }
      end

      report.total = UserAction.count_daily_engaged_users if report.facets.include?(:total)

      if report.facets.include?(:prev_period)
        prev_data =
          UserAction.count_daily_engaged_users(report.prev_start_date, report.prev_end_date)

        prev = prev_data.sum { |k, v| v }
        prev = prev / ((report.end_date - report.start_date) / 1.day) if prev > 0
        report.prev_period = prev
      end

      data.each { |key, value| report.data << { x: key, y: value } }
    end
  end
end