///|
/// OtelAttribute represents a simple OpenTelemetry-compatible attribute.
pub struct OtelAttribute {
  key : String
  value : String
}

///|
/// OtelRecord represents a normalized OpenTelemetry-compatible event record.
pub struct OtelRecord {
  name : String
  timestamp_ms : Int64
  attributes : Array[OtelAttribute]
}

///|
/// to_otel_record converts a Relay telemetry event into an OpenTelemetry-compatible record.
pub fn TelemetryEvent::to_otel_record(
  self : TelemetryEvent,
) -> OtelRecord {
  let attributes : Array[OtelAttribute] = []

  attributes.push({
    key: "relay.status",
    value: self.status.to_string(),
  })

  attributes.push({
    key: "relay.incident_count",
    value: self.incident_count.to_string(),
  })

  attributes.push({
    key: "relay.summary",
    value: self.summary,
  })

  match self.severity {
    Some(severity) =>
      attributes.push({
        key: "relay.severity",
        value: severity.to_string(),
      })
    None => ()
  }

  {
    name: "relay.telemetry",
    timestamp_ms: self.timestamp_ms,
    attributes,
  }
}