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

  def props
    application_documents.map do |application_document|
      document = application_document.document
      file = file_by_document[document.id]

      {
        id: document.id,
        name: document.name,
        description: document.description,
        required: application_document.required,
        filename: file&.attachment&.filename,
        url: file&.attachment&.service_url
      }
    end
  end

  def available?
    application_documents.exists?
  end

  private
    def application_documents
      @application_documents ||= @application.application_documents
        .includes(:document)
        .ordered
    end

    def applicant_documents
      @applicant_documents ||= @applicant.applicant_documents.includes(file_attachment: :blob)
    end

    def file_by_document
      @file_by_document ||= applicant_documents.map { |d| [d.document_id, d.file] }.to_h
    end
end
