class Admin::Admissions::Applications::AgreementsController < Admin::Admissions::Controller
  include Admin::Admissions::ApplicationScoped

  def index
    data = agreements.includes(:agreement).order(:position).map { |a| agreement_props(a) }
    render_success :ok, json: data
  end

  def create
    admissions_agreement = admissions_agreements.find(params[:agreement_id])
    agreement = agreements.build(agreement: admissions_agreement)
    if agreement.save
      render_success :ok, json: agreement_props(agreement)
    else
      render_error :unprocessable_entity, message: 'Something went wrong'
    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, event: :removed
    else
      render_error :unprocessable_entity, errors: agreement
    end
  end

  private
    def agreements
      application.application_agreements
    end

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

    def admissions_agreements
      current_school.admission_agreements
    end

    def agreement_params
      params.permit(:position, :required)
    end

    def agreement_props(agreement)
      {
        id: agreement.id,
        name: agreement.agreement.name,
        position: agreement.position,
        required: agreement.required,
        agreement_id: agreement.agreement_id
      }
    end
end
