# frozen_string_literal: true

module ConvenientService
  module Examples
    module Standard
      module V1
        class RequestParams
          module Services
            class LogRequestParams
              include ConvenientService::Standard::V1::Config

              attr_reader :request, :params, :tag

              def initialize(request:, params:, tag: Constants::Tags::EMPTY)
                @request = request
                @params = params
                @tag = tag
              end

              def result
                Entities::Logger.log(message)

                success
              end

              private

              def message
                <<~MESSAGE
                  #{prefix}:
                  {
                  #{content}
                  }
                MESSAGE
              end

              def prefix
                text = "[Thread##{Thread.current.object_id}]"

                text += " [Request##{request.object_id}]"
                text += " [Params]"
                text += " [#{tag}]" unless tag.empty?

                text
              end

              def content
                params.map { |key, value| "  #{key}: #{value.inspect}" }.join(",\n")
              end
            end
          end
        end
      end
    end
  end
end