# 按天获取百度统计数据，pv，访问，ip和来源分类占比
# 其他统计：前一周用户留存率
class DailyPlatformStatisticsJob < ApplicationJob
  queue_as :default

  def perform(*args)
    Rails.logger.info("*********开始统计*********")

    tongji_service = Baidu::TongjiService.new
    access_token = tongji_service.access_token
    Rails.logger.info "job baidu_tongji_auth access_token ===== #{access_token}"
    ActiveJob::Base.logger.info "job baidu_tongji_auth access_token ===== #{access_token}"
    # 从最后一个记录日期开始，如果遗漏日期数据可以补充数据
    last_date = DailyPlatformStatistic.order(:date).last
    start_date = last_date.present? ? last_date.date : 1.days.ago.beginning_of_day
    end_date = Time.now
    if access_token.present?
      tongji_service.overview_batch_add(start_date, end_date)

      # 本周访问来源占比，每天记录一次，如果遗漏日期数据可以补充数据
      tongji_service.source_from_batch_add(start_date, end_date)
    end
    # 周用户留存率
    pre_week_user_ids = User.where(created_on: pre_week).pluck(:id).uniq
    weekly_keep_user_count = User.where(id: pre_week_user_ids).where(last_login_on: current_week).count
    weekly_keep_rate = format("%.2f", pre_week_user_ids.size > 0 ? weekly_keep_user_count.to_f / pre_week_user_ids.size : 0)

    job_date = 1.days.ago
    daily_statistic = DailyPlatformStatistic.find_or_initialize_by(date: job_date)
    daily_statistic.weekly_keep_rate = weekly_keep_rate
    daily_statistic.save
  end

  private

  def current_week
    Time.now.beginning_of_week..Time.now.end_of_day
  end

  def pre_week
    # 7.days.ago.beginning_of_week..7.days.ago.beginning_of_week.end_of_week
    Time.now.prev_week..Time.now.prev_week.end_of_week
  end
end
