# frozen_string_literal: true

class PostVersionsController < ApplicationController
  before_action :check_availabililty
  around_action :set_timeout
  respond_to :html, :xml, :json
  respond_to :js, only: [:undo]

  def index
    set_version_comparison("current")
    @post_versions = authorize PostVersion.paginated_search(params)

    if request.format.html?
      @post_versions = @post_versions.includes(:updater, post: [:uploader, :media_asset, :versions])
    else
      @post_versions = @post_versions.includes(post: :versions)
    end

    respond_with(@post_versions)
  end

  def search
    authorize PostVersion
  end

  def undo
    @post_version = authorize PostVersion.find(params[:id])
    @post_version.undo!

    respond_with(@post_version, location: post_versions_path(search: { post_id: @post_version.post_id }))
  end

  private

  def set_timeout
    PostVersion.connection.execute("SET statement_timeout = #{CurrentUser.user.statement_timeout}")
    yield
  ensure
    PostVersion.connection.execute("SET statement_timeout = 0")
  end

  def check_availabililty
    return if PostVersion.enabled?
    raise NotImplementedError, "Archive service is not configured. Post versions are not saved."
  end
end
