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

  def props
    application_essays.map do |application_essay|
      {}.tap do |props|
        applicant_essay = applicant_essay_by_essay[application_essay.essay_id]

        props[:id] = application_essay.essay.id
        props[:name] = application_essay.essay.name
        props[:body] = application_essay.essay.body
        props[:required] = application_essay.required
        props[:word_count] = applicant_essay&.word_count || 0
        props[:response] = applicant_essay&.body
      end
    end
  end

  def available?
    application_essays.exists?
  end

  private
    def application_essays
      @application_essays ||= @application.application_essays.includes(:essay).ordered
    end

    def applicant_essay_by_essay
      @applicant_essay_by_essay ||= @applicant.applicant_essays.decorate.index_by(&:essay_id)
    end
end
