class Pact::MockService::RequestHandlers::InteractionReplay

def find_response request_hash

def find_response request_hash
  actual_request = Pact::Consumer::Request::Actual.from_hash(request_hash)
  logger.info "Received request #{actual_request.method_and_path}"
  logger.debug pretty_generate request_hash
  candidate_interactions = expected_interactions.find_candidate_interactions actual_request
  matching_interactions = candidate_interactions.matching_interactions actual_request
  case matching_interactions.size
  when 0 then handle_unrecognised_request actual_request, candidate_interactions
  when 1 then handle_matched_interaction matching_interactions.first
  else
    handle_more_than_one_matching_interaction actual_request, matching_interactions
  end
end

def handle_matched_interaction interaction

def handle_matched_interaction interaction
  HandleMatchedInteraction.call(interaction, verified_interactions, actual_interactions, logger)
end

def handle_more_than_one_matching_interaction actual_request, matching_interactions

def handle_more_than_one_matching_interaction actual_request, matching_interactions
  multiple_interactions_handler.call(actual_request, matching_interactions, verified_interactions, actual_interactions, logger)
end

def handle_unrecognised_request actual_request, candidate_interactions

def handle_unrecognised_request actual_request, candidate_interactions
  HandleUnrecognisedInteraction.call(actual_request, candidate_interactions, actual_interactions, logger)
end

def initialize name, logger, session, cors_enabled = false, stub = false

def initialize name, logger, session, cors_enabled = false, stub = false
  @name = name
  @logger = logger
  @expected_interactions = session.expected_interactions
  @actual_interactions = session.actual_interactions
  @verified_interactions = session.verified_interactions
  @cors_enabled = cors_enabled
  @multiple_interactions_handler = stub ? HandleMultipleInteractionsFoundForStub : HandleMultipleInteractionsFound
end

def logger_info_ap msg

def logger_info_ap msg
  logger.info msg
end

def match? env

def match? env
  true # default handler
end

def respond env

def respond env
  find_response request_as_hash_from(env)
end