class Admission::Applicants::ProfileFieldService < ApplicationService
  def initialize(applicant, application)
    @applicant = applicant
    @application = application
  end

  def props
    profile_fields.map do |field|
      value = case field.field
      when 'application_grade'
        @applicant.grade
      when 'race'
        @applicant.applicant_races.pluck(:race_id)
      else
        @applicant[field.field]
      end

      incomplete = if field.field.to_sym == :ethnicity
        field.required && value.to_sym == :unspecified
      else
        field.required && value.blank?
      end
      { name: field.field, value: value, incomplete: incomplete, required: field.required }
    end
  end

  def completed?
    props.none? { |p| p[:incomplete] }
  end

  private
    def profile_fields
      @profile_fields ||= @application.displayable_profile_fields.ordered
    end
end
