# frozen_string_literal: true

def support(*paths)
  paths.each do |path|
    require File.join('support/', path.to_s)
  end
end

def qa_support(*paths)
  paths.each do |path|
    require File.join('qa/support/', path.to_s)
  end
end

def core_support(*paths)
  paths.each do |path|
    require File.join('ledger_sync/test/support/', path.to_s)
  end
end

def core_qa_support(*paths)
  paths.each do |path|
    require File.join('ledger_sync/test/support/qa/', path.to_s)
  end
end

module LedgerSync
  module Test
    module Support
      def self.setup(*paths_to_require)
        # Dotenv
        require 'dotenv'
        Dotenv.load(
          '.env.test.local',
          '.env.test',
          '.env'
        )
        require 'climate_control'

        require 'webmock/rspec'
        require 'simplecov'
        require 'simplecov-lcov'
        require 'coveralls'

        SimpleCov::Formatter::LcovFormatter.config do |c|
          c.report_with_single_file = true
          c.single_report_path = 'coverage/lcov.info'
        end
        Coveralls.wear!('rails')

        SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
          [
            Coveralls::SimpleCov::Formatter,
            SimpleCov::Formatter::HTMLFormatter,
            SimpleCov::Formatter::LcovFormatter
          ]
        )

        SimpleCov.start('rails') do
          add_filter 'lib/ledger_sync/util/debug.rb'
        end

        # Set an environment variable to determine when we are testing.  This
        # prevents things like the QuickBooks Online client overwriting
        # environment variables with dummy values.
        ENV['TEST_ENV'] = 'true'

        require 'bundler/setup'
        require 'ap'
        require 'byebug'

        paths_to_require.each { |e| require e.to_s }

        core_support 'webmock_helpers'
        core_support 'record_collection'

        core_support 'qa/ledger_support_setup'

        core_support :factory_bot

        RSpec.configure do |config|
          # Enable flags like --only-failures and --next-failure
          config.example_status_persistence_file_path = 'tmp/rspec_history.txt'

          # Disable RSpec exposing methods globally on `Module` and `main`
          config.disable_monkey_patching!

          config.expect_with :rspec do |c|
            c.syntax = :expect
          end
        end
      end
    end
  end
end
