class Admin::Covid::Form::FieldsController < Admin::Covid::Controller
  def index
    render_success :ok, json: fields.includes(:options).ordered.map { |f| field_props(f) }
  end

  def batch_update
    updates = []

    fields.where(id: params[:ids]).each do |field|
      sequence = params[:fields].find { |i| i[:id] == field.id }[:sequence]
      field.assign_attributes(sequence: sequence)
      updates << field
    end

    if transactional_save(updates)
      render_success :ok, message: 'Fields Updated'
    else
      render_error :unprocessable_entity, message: 'Something went wrong'
    end
  end

  private
    def fields
      section.fields
    end

    def section
      @section ||= current_school.covid_form_sections.find_by(id: params[:section_id])
    end

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

    def field_props(field)
      {}.tap do |props|
        props[:id] = field.id
        props[:section_id] = field.section_id
        props[:type] = field.type
        props[:field] = field.field
        props[:title] = field.title
        props[:description] = field.description
        props[:sequence] = field.sequence
        props[:required] = field.required
        return props if field.type == 'Covid::FormDisplay' || !field.has_options?

        props[:options] = field.options.map { |o| option_props(o) }
      end
    end
end
