import { LogSeverity } from "../../api-logs/manager/types.cjs";
import { AttributeValue, DiagLogger } from "@opentelemetry/api";
import { ReadableSpan } from "@opentelemetry/sdk-trace-web";

//#region src/managers/EmbraceLimitManager/types.d.ts
interface EmbraceLimitManagerArgs {
  diag?: DiagLogger;
  maxAllowed: Record<MaxLimitedType, number>;
  maxLength: Record<LengthLimitedType, number>;
  maxAttributes: Record<AttributeLimitedType, number>;
}
type LogLimitedType = 'error_log' | 'warning_log' | 'info_log';
type MaxLimitedType = LogLimitedType | 'exception' | 'span' | 'network_request' | 'breadcrumb' | 'session_property' | 'user_timing_mark' | 'user_timing_measure' | 'element_timing' | 'server_timing';
type LengthLimitedType = LogLimitedType | 'exception' | 'breadcrumb' | 'session_property_key' | 'session_property_value' | 'log_attribute_key' | 'log_attribute_value' | 'exception_attribute_key' | 'exception_attribute_value';
type AttributeLimitedType = LogLimitedType | 'exception';
type LimitedType = MaxLimitedType | LengthLimitedType | AttributeLimitedType;
type LimitOperation = 'drop' | 'truncate_string' | 'truncate_attributes';
type LimitedBreadcrumb = {
  name: string;
};
type LimitedLog = {
  message: string;
  attributes: Record<string, AttributeValue | undefined>;
};
type LimitedException = {
  message: string;
  attributes: Record<string, AttributeValue | undefined>;
};
type LimitedSessionProperty = {
  key: string;
  value: string;
};
interface LimitManagerInternal {
  dropReadableSpan: (span: ReadableSpan) => boolean;
  limitLog: (message: string, severity: LogSeverity, attributes: Record<string, AttributeValue | undefined>) => LimitedLog | 'dropped';
  limitException: (message: string, attributes: Record<string, AttributeValue | undefined>) => LimitedException | 'dropped';
  limitSessionProperty: (key: string, value: string) => LimitedSessionProperty | 'dropped';
  limitBreadcrumb: (name: string) => LimitedBreadcrumb | 'dropped';
  limitUserTimingEntry: (entryType: 'mark' | 'measure') => boolean;
  limitElementTimingEntry: () => boolean;
  limitServerTimingEntry: () => boolean;
  reset: () => void;
  getDiagnosticCounts: () => Record<string, number>;
  truncateString: (type: LengthLimitedType, body: string) => string;
}
//#endregion
export { AttributeLimitedType, EmbraceLimitManagerArgs, LengthLimitedType, LimitManagerInternal, LimitOperation, LimitedBreadcrumb, LimitedException, LimitedLog, LimitedSessionProperty, LimitedType, LogLimitedType, MaxLimitedType };
//# sourceMappingURL=types.d.cts.map