# frozen_string_literal: true

class DiscourseIIFE
  def initialize(options = {}, &block)
  end

  def self.instance
    @instance ||= new
  end

  def self.call(input)
    instance.call(input)
  end

  # Add a IIFE around our javascript
  def call(input)
    path = input[:environment].context_class.new(input).pathname.to_s
    data = input[:data]

    # Only discourse or admin paths
    return data unless (path =~ /\/javascripts\/discourse/ || path =~ /\/javascripts\/admin/ || path =~ /\/test\/javascripts/)

    # Ignore the js helpers
    return data if (path =~ /test\_helper\.js/)
    return data if (path =~ /javascripts\/helpers\//)

    # Ignore ES6 files
    return data if (path =~ /\.es6/)

    # Ignore translations
    return data if (path =~ /\/translations/)

    # We don't add IIFEs to handlebars
    return data if path =~ /\.handlebars/
    return data if path =~ /\.shbrs/
    return data if path =~ /\.hbrs/
    return data if path =~ /\.hbs/
    return data if path =~ /\.hbr/

    return data if path =~ /discourse-loader/

    "(function () {\n\nvar $ = window.jQuery;\n// IIFE Wrapped Content Begins:\n\n#{data}\n\n// IIFE Wrapped Content Ends\n\n })(this);"
  end

end