# typed: ignore

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

require 'sqreen/kit/configuration'
require 'sqreen/kit/signals/point'
require 'sqreen/kit/signals/dto_helper'

# reference: https://github.com/sqreen/SignalsSchemas/blob/master/schemas/payload/tracing/server-2020-04-21/schema.cue

module Sqreen
  module Ecosystem
    module Tracing
      module Signals
      end
    end
  end
end

class Sqreen::Ecosystem::Tracing::Signals::TracingServer < Sqreen::Kit::Signals::Point
  readonly_attrs :payload_schema, :source, :signal_name

  def initialize(values = {})
    self.payload_schema = Payload::SCHEMA_VERSION
    self.source = Sqreen::Kit::Configuration.default_source
    self.signal_name = 'tracing.server'
    self.time = values[:time] || Time.now
    super
  end

  def payload=(payload)
    unless payload.is_a?(Payload)
      raise ArgumentError, "Payload should be a #{Payload}"
    end
    super
  end

  class Payload
    include Sqreen::Kit::Signals::DtoHelper

    add_mandatory_attrs :transport, :client_ip

    SCHEMA_VERSION = 'tracing/server-2020-04-21'.freeze

    # @return [Symbol]
    attr_accessor :transport

    # @return [String]
    attr_accessor :client_ip

    # @return [Array<String>]
    attr_accessor :previous_hops

    # @return [String]
    attr_accessor :tracing_identifier
  end
end