class Admin::Admissions::DocumentsController < Admin::Admissions::Controller
  def index
    data = documents.by_archived(params[:archived]&.to_bool).sorted
    render_success :ok, json: data.map { |d| document_props(d) }
  end

  def show
    render_success :ok, json: document_props(document)
  end

  def create
    document = documents.build(document_params)
    if document.save
      render_success :ok, json: document_props(document)
    else
      render_error :unprocessable_entity, errors: document
    end
  end

  def update
    if document.update(document_params)
      render_success :ok, json: document_props(document)
    else
      render_error :unprocessable_entity, errors: document
    end
  end

  def destroy
    if document.destroy
      render_success :ok
    else
      render_success :unprocessable_entity, errors: document
    end
  end

  private
    def documents
      current_school.admission_documents
    end

    def document
      @document ||= documents.find(params[:id])
    end

    def document_params
      params.permit(:name, :description, :archived, :display_name, :profile)
    end

    def document_props(document)
      {}.tap do |props|
        props[:id] = document.id
        props[:name] = document.name
        props[:description] = document.description
        props[:archived] = document.archived
        props[:display_name] = document.display_name
        props[:profile] = document.profile
        return props if action_name.to_sym == :index

        props[:has_values] = document.applicant_documents.count
      end
    end
end
