import { LogRecord, LogRecordProcessor } from "@opentelemetry/sdk-logs";
import { Context } from "@opentelemetry/api";
import { SignalAttributeValue } from "../index.js";

export class EnrichLogProcessor implements LogRecordProcessor {
  private _spanAttributes?:
    | Record<string, SignalAttributeValue | (() => SignalAttributeValue)>
    | undefined = undefined;

  constructor(
    spanAttributes?: Record<
      string,
      SignalAttributeValue | (() => SignalAttributeValue)
    >,
  ) {
    this._spanAttributes = spanAttributes;
  }
  forceFlush(): Promise<void> {
    return Promise.resolve();
  }
  onEmit(logRecord: LogRecord, _context?: Context): void {
    if (this._spanAttributes) {
      for (const [key, value] of Object.entries(this._spanAttributes)) {
        logRecord.setAttribute(
          key,
          typeof value === "function" ? value() : value,
        );
      }
    }
  }
  shutdown(): Promise<void> {
    return Promise.resolve();
  }
}
