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

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

  def call
    CSV.generate do |csv|
      csv << ['Opportunity', 'Student Hours', 'Family Hours']
      opportunities.each do |opportunity|
        student = (student_hours[opportunity.id] || 0).round(2)
        family = (family_hours[opportunity.id] || 0).round(2)
        csv << [opportunity.name, student, family]
      end
    end
  end

  private
    def opportunities
      @opportunities ||= @school.service_opportunities
    end

    def student_hours
      @student_hours ||= @school.service_student_logs
        .approved
        .by_date_range(datetime_range(@dates))
        .group(:opportunity_id)
        .sum(:hours)
    end

    def family_hours
      @family_hours ||= @school.service_family_logs
        .approved
        .by_date_range(datetime_range(@dates))
        .group(:opportunity_id)
        .sum(:hours)
    end
end
