module Admins::RenderHelper
  extend ActiveSupport::Concern

  def render_forbidden
    respond_to do |format|
      format.html { redirect_to '/403' }
      format.json { super }
    end
  end

  def render_not_found
    respond_to do |format|
      format.html { render 'admins/shared/404' }
      format.js { render_js_error('资源未找到') }
      format.json { render status: 404, json: { message: '资源未找到' } }
    end
  end

  def render_unprocessable_entity(message)
    respond_to do |format|
      format.html { render 'admins/shared/422' }
      format.js { render_js_error(message) }
      format.json { render status: 422, json: { message: message } }
    end
  end
  alias_method :render_error, :render_unprocessable_entity

  def internal_server_error
    respond_to do |format|
      format.html { render 'admins/shared/500' }
      format.js { render_js_error(message) }
      format.json { render status: 500, json: { message: '系统错误' } }
    end
  end

  def render_js_template(template, **opts)
    render({ template: template, formats: :js }.merge(opts))
  end

  def render_delete_success
    render_js_template 'admins/shared/delete'
  end
  alias_method :render_success_js, :render_delete_success

  def render_js_error(message)
    render_js_template 'admins/shared/error', locals: { message: message }
  end
end