class Covid::ScreeningForm < ApplicationService
  def initialize(school, employee_field=false)
    @school = school
    @employee_field = employee_field
  end

  def call
    sections.map { |s| section_props(s) }
  end

  private
    def sections
      @school.covid_form_sections
        .by_employee_field(@employee_field)
        .eager_load(fields: :options)
        .ordered
        .order('covid_form_fields.sequence ASC')
    end

    def section_props(section)
      {
        id: section.id,
        title: section.title,
        description: section.description,
        fields: section.fields.map { |f| field_props(f) }
      }
    end

    def field_props(field)
      {}.tap do |props|
        props[:id] = field.id
        props[:type] = field.type
        props[:field] = field.field
        props[:title] = field.title
        props[:description] = field.description
        props[:required] = field.required
        props[:value] = nil
        if field.type == 'Covid::FormQuestion' && field.has_options?
          props[:options] = field.options.map { |o| option_props(o) }
          props[:value] = [] if field.checkbox?
        end
      end
    end

    def option_props(option)
      {
        id: option.id,
        description: option.value,
        label: option.value,
        value: option.id
      }
    end
end
