# frozen_string_literal: true

class QueryBuilder
  attr_reader :scope, :params, :result, :period

  def initialize(scope, params)
    @scope = scope
    @params = params
    @period = params[:period]
  end

  def call
    @result = scope
    @result = @result.where(started_at: time_period)
    @result
  end

  def time_period
    timezone = "Beijing"
    return (7.days.ago.in_time_zone(timezone).to_s(:db)..) if period.blank?

    return (30.minutes.ago.in_time_zone(timezone).to_s(:db)..) if period == "realtime"
    return (Time.now.in_time_zone(timezone).beginning_of_day.to_s(:db)..) if period == "today"
    return (Time.now.in_time_zone(timezone).beginning_of_week.to_s(:db)..) if period == "week"
    return (Time.now.in_time_zone(timezone).beginning_of_month.to_s(:db)..) if period == "month"

    return (7.days.ago.in_time_zone(timezone).to_s(:db)..) if period == "7d"
    return (30.days.ago.in_time_zone(timezone).to_s(:db)..) if period == "30d"
    return (180.days.ago.in_time_zone(timezone).to_s(:db)..) if period == "6m"
    return (360.days.ago.in_time_zone(timezone).to_s(:db)..) if period == "12m"
  end

  def self.call(scope, params)
    instance = self.new(scope, params)
    instance.call
    instance
  end
end
