class Admin::Forms::Controller < Admin::Controller
  def index
    render_success :ok, json: forms.map { |form| props(form) }
  end

  def show
    render_success :ok, json: props(form)
  end

  def create
    form = forms.build(form_params)
    if form.save
      render_success :created, json: props(form)
    else
      render_error :unprocessable_entity, json: form.errors
    end
  end

  def update
    if form.update(form_params)
      render_success :ok, json: props(form)
    else
      render_error :unprocessable_entity, json: form.errors
    end
  end

  def destroy
    if form.destroy
      render_success :ok, json: props(form)
    else
      render_error :unprocessable_entity, json: form.errors
    end
  end

  private
    def forms
      current_school.forms.includes(:entries)
    end

    def form
      @form ||= forms.find_by(id: params[:form_id] || params[:id])
    end

    def form_params
      params.permit(
        :name,
        :description,
        :notifier_id,
        :active,
        :internal,
        :public,
        :alert,
        :next_form_id
      )
    end

    def props(form)
      {
        id: form.id,
        name: form.name,
        description: form.description,
        internal: form.internal,
        public: form.public,
        alert: form.alert,
        active: form.active,
        notifier_id: form.notifier_id.zero? ? nil : form.notifier_id,
        next_form_id: form.next_form_id.zero? ? nil : form.next_form_id,
        count: form.entries.size
      }
    end
end
