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

  def show
    render_success :ok, json: agreement_props(agreement)
  end

  def create
    agreement = agreements.build(agreement_params)
    if agreement.save
      render_success :ok, json: agreement_props(agreement)
    else
      render_error :unprocessable_entity, errors: agreement
    end
  end

  def update
    if agreement.update(agreement_params)
      render_success :ok, json: agreement_props(agreement)
    else
      render_error :unprocessable_entity, errors: agreement
    end
  end

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

  private
    def agreements
      current_school.admission_agreements
    end

    def agreement
      @agreement ||= agreements.find(params[:id])
    end

    def agreement_params
      params.permit(:name, :body, :archived)
    end

    def agreement_props(agreement)
      {}.tap do |props|
        props[:id] = agreement.id
        props[:name] = agreement.name
        props[:archived] = agreement.archived
        props[:body] = agreement.body
        return props if action_name.to_sym == :index

        props[:has_values] = agreement.applicant_agreements.count
      end
    end
end
