class Csv::Service::FamilyTotalService < Csv::ApplicationService
  include DateRangeHelper

  def initialize(school, params)
    @school = school
    @dates = params['dates']
  end

  def call
    CSV.generate do |csv|
      csv << ['Family Code', 'Name', 'Approved Hours']
      families.each do |family|
        csv << [
          family.code,
          family.name,
          approved_hours[family.id] || 0
        ]
      end
    end
  end

  private
    def families
      @families ||= @school.families.current_status(:current)
    end

    def approved_hours
      @approved_hours ||= @school.service_family_logs
        .by_date_range(date_range(@dates))
        .where(family_id: families.pluck(:id))
        .approved
        .group(:family_id)
        .sum(:hours)
    end
end
