class Admin::Admissions::ContactRevisionFieldsController < Admin::Admissions::Controller
  def show
    render_success :ok, json: revision_fields.map { |f| revision_field_props(f) }
  end

  def update
    revision_fields.each { |f| f.assign_attributes(revision_params(f)) }
    if transactional_save(revision_fields)
      render_success :ok
    else
      render_error :unprocessible_entity, message: 'Something went wrong.'
    end
  end

  private
    def revision_fields
      @revision_fields ||= current_school.admission_contact_revision_fields
        .build_all(current_school)
    end

    def revision_params(revision)
      params.require(revision.field).permit(:display, :required)
    end

    def revision_field_props(field)
      locked = Admission::ContactRevisionField::REQUIRED_FIELDS.include?(field.field)
      {}.tap do |prop|
        prop[:field] = field.field
        prop[:name] = field.field.humanize
        prop[:display] = locked || field.display
        prop[:required] = locked || field.required
        prop[:locked] = locked
      end
    end
end
