# frozen_string_literal: true

require 'mcp_filter_sdk'
require 'rspec'

# Configure RSpec
RSpec.configure do |config|
  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.shared_context_metadata_behavior = :apply_to_host_groups
  config.filter_run_when_matching :focus
  config.example_status_persistence_file_path = 'spec/examples.txt'
  config.disable_monkey_patching!
  config.warnings = true

  config.default_formatter = 'doc' if config.files_to_run.one?

  config.profile_examples = 10
  config.order = :random
  Kernel.srand config.seed
end

# Helper methods for tests
module TestHelpers
  def create_test_filter(name = 'test-filter')
    callbacks = {
      on_data: ->(data) { data },
      on_error: ->(error) { puts "Error: #{error}" }
    }

    McpFilterSdk::CApiFilter.new(name, callbacks)
  end

  def create_test_transport_config
    {
      protocol: :stdio,
      host: nil,
      port: nil,
      max_connections: 1,
      buffer_size: 1024
    }
  end

  def create_test_chain_config
    {
      name: 'test-chain',
      execution_mode: :sequential,
      max_filters: 10,
      timeout: 5000,
      enabled: true
    }
  end
end

RSpec.configure do |config|
  config.include TestHelpers
end
