class Csv::Nursing::ScreeningService < Csv::ApplicationService
  include DateRangeHelper

  def initialize(school, options)
    @school = school
    @options = options
  end

  def call
    CSV.generate do |csv|
      csv << headers
      screenings.each do |screening|
        csv << content(screening)
      end
    end
  end

  private
    def screenings
      @screenings ||= @school.nursing_screenings
        .includes(:student)
        .with_date_range(date_range(@options['dates']))
        .where(student_id: @options['ids'])
        .merge(Student.ordered)
        .decorate
    end

    def headers
      [
        'Student ID',
        'Student Name',
        'Date',
        'Age',
        'Height',
        'Weight',
        'BMI',
        'Hearing',
        'Sight'
      ]
    end

    def content(screening)
      [
        screening.student.id,
        screening.student.full_name(:reverse),
        screening.date,
        screening.age,
        screening.height,
        screening.weight,
        screening.bmi,
        screening.hearing_label,
        screening.sight_label
      ]
    end
end
