class Admin::Admissions::Applicants::EssaysController < Admin::Admissions::Controller
  include Admin::Admissions::ApplicantScoped

  def index
    render_success :ok, json: essays.positioned.map { |c| essay_props(c) }
  end

  def show
    render_success :ok, json: essay_props(essay)
  end

  def destroy
    if applicant_essay.destroy
      render_success :ok, json: essay_props(essay)
    else
      render_error :unprocessable_entity, errors: applicant_essay
    end
  end

  private
    def essays
      applicant.application.essays
    end

    def applicant_essays
      applicant.applicant_essays
    end

    def essay
      @essay ||= essays.find_by(id: params[:id])
    end

    def applicant_essay
      @applicant_essay ||= applicant_essays.find_by(essay: essay)
    end

    def essay_values
      @essay_values ||= applicant_essays.map { |e| [e.essay_id, e.decorate] }.to_h
    end

    def essay_props(essay)
      applicant_essay = essay_values[essay.id]

      {}.tap do |props|
        props[:id] = essay.id
        props[:name] = essay.name
        props[:word_count] = applicant_essay&.word_count || 0
        props[:question] = essay.body
        props[:response] = applicant_essay&.body
      end
    end
end
