import {
  ResourceDetector,
  DetectedResource,
  DetectedResourceAttributes,
} from "@opentelemetry/resources";
import { SignalAttributeValue } from "./index.js";
import packageJson from "../package.json" with { type: "json" };

export class ObservabilityResourceDetector implements ResourceDetector {
  private _resourceAttributes: Record<string, SignalAttributeValue> | undefined;

  constructor(resourceAttributes?: Record<string, SignalAttributeValue>) {
    this._resourceAttributes = resourceAttributes;
  }

  detect(): DetectedResource {
    let attributes: DetectedResourceAttributes = {};

    if (this._resourceAttributes) {
      attributes = {
        ...this._resourceAttributes,
      };
    }

    attributes["o11y.sdk.name"] = packageJson.name;
    attributes["o11y.sdk.version"] = packageJson.version;

    return { attributes };
  }
}
