# frozen_string_literal: true

require 'execjs'

module Csso
  # low-level wrapper around the js lib
  class JsLib
    def initialize(verbose = false)
      if verbose && ExecJS.runtime.is_a?(ExecJS::ExternalRuntime)
        warn "You're using ExecJS::ExternalRuntime, did you forget to add therubyracer or other execjs runtime to gemfile?"
      end

      lib = File.read(File.expand_path("../../#{CSSO_JS_LIB}", File.dirname(__FILE__)))
      raise 'cannot compile or what?' unless (@csso = ExecJS.runtime.compile(lib))
    end

    def compress(css, structural_optimization = true)
      # TODO: raise ArgumentError, "expect css to be a String" unless css.is_a?(String)
      return nil unless css.is_a?(String)

      @csso.call('do_compression', css, structural_optimization)
    end

    def compress_with_sourcemap(css, filename, structural_optimization = true)
      return nil unless css.is_a?(String)

      @csso.call('do_compression_with_map', css, filename, structural_optimization)
    end
  end
end