require 'singleton'

module Wisepdf
  class Configuration
    include Singleton

    class << self
      attr_accessor :options
      attr_accessor :wkhtmltopdf

      def wkhtmltopdf
        return @wkhtmltopdf if @wkhtmltopdf.present?

        if @wkhtmltopdf.nil? && !self.windows?
          @wkhtmltopdf = (defined?(Bundler) ? `bundle exec which wkhtmltopdf` : `which wkhtmltopdf`).chomp
        end
        return @wkhtmltopdf
      end

      def configure
        yield self
      end

      def use_asset_pipeline?
        return true if ::Rails.configuration.assets.enabled.nil?

        !!(::Rails.configuration.assets.enabled)
      end

      def reset!
        @options = {
          :encoding => "UTF-8",
          :use_xserver => false
        }
        @wkhtmltopdf = nil
      end

      def development?
        (defined?(::Rails) && ::Rails.env == 'development') ||
          (defined?(RAILS_ENV) && RAILS_ENV == 'development')
      end

      def test?
        (defined?(::Rails) && ::Rails.env == 'test') ||
          (defined?(RAILS_ENV) && RAILS_ENV == 'test')
      end

      def production?
        (defined?(::Rails) && ::Rails.env == 'production') ||
          (defined?(RAILS_ENV) && RAILS_ENV == 'production')
      end

      def windows?
        RbConfig::CONFIG['target_os'] == 'mingw32'
      end
    end

    self.reset!

    def method_missing(method)
      self.class.send(method)
    end
  end
end
