package eu.mulk.quarkus.observability.googlecloud.jsonlogging;

import io.smallrye.common.constraint.Nullable;
import java.time.Instant;
import java.util.Map;
import javax.json.bind.annotation.JsonbProperty;

/**
 * A JSON log entry compatible with Google Cloud Logging.
 *
 * <p>Roughly (but not quite) corresponds to Google Cloud Logging's <a
 * href="https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry">LogEntry</a>
 * structure.
 */
public record GoogleCloudLogEntry(
    String getMessage,
    String getSeverity,
    Timestamp getTimestamp,
    @Nullable String getTrace,
    @Nullable String getSpanId,
    @Nullable SourceLocation getSourceLocation,
    @Nullable Map<String, String> getLabels,
    @Nullable Map<String, Object> getParameters,
    @Nullable Map<String, String> getMappedDiagnosticContext,
    @Nullable String getNestedDiagnosticContext,
    @Nullable @JsonbProperty("@type") String getType) {

  public static record SourceLocation(
      @Nullable String getFile, @Nullable String getLine, @Nullable String getFunction) {}

  public static record Timestamp(long getSeconds, int getNanos) {

    public Timestamp(Instant t) {
      this(t.getEpochSecond(), t.getNano());
    }
  }
}
