module WolfCore::LambdaFunctionOperations

def get_event_params(event)

def get_event_params(event)
  params = {}
  event_body = event['body']
  if event_body.present?
    params.merge!(deep_parse_json(event_body))
  end
  path_parameters = event['pathParameters']
  if path_parameters.present?
    params.merge!(deep_parse_json(path_parameters))
  end
  query_parameters = event['queryStringParameters']
  if query_parameters.present?
    params.merge!(deep_parse_json(query_parameters))
  end
  return event.with_indifferent_access if params.empty?
  params.with_indifferent_access
end

def invoke_lambda(function_name:, payload:, invocation_type: nil)

def invoke_lambda(function_name:, payload:, invocation_type: nil)
  WolfCore::LambdaFunctionDataSource.invoke(
    function_name: function_name, payload: payload, invocation_type: invocation_type
  )
end

def parse_lambda_response(response)

def parse_lambda_response(response)
  payload = JSON.parse(response.payload.string) rescue response.payload
  OpenStruct.new({
    status_code: response.status_code,
    payload: payload,
  })
end

def result_to_response(result)

def result_to_response(result)
  if result.success?
    { statusCode: 200, body: result.data.to_h.to_json }
  else
    { statusCode: result.error.status || 422, body: result.error.to_h.to_json }
  end
end

def validate_lambda_response(response:, message:, error_data: nil)

def validate_lambda_response(response:, message:, error_data: nil)
  unless response.status_code == 200
    error_data = {
      message: message,
      response: parse_lambda_response(response)
    }.merge(error_data || {})
    raise_service_error(error_data)
  end
end