import * as z from "zod/v3";
import { ClosedEnum } from "../../types/enums.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import { Access, Access$Outbound } from "./access.js";
import { DependentExperimentRep, DependentExperimentRep$Outbound } from "./dependentexperimentrep.js";
import { DependentMetricGroupRep, DependentMetricGroupRep$Outbound } from "./dependentmetricgrouprep.js";
import { Filter, Filter$Outbound } from "./filter.js";
import { FlagListingRep, FlagListingRep$Outbound } from "./flaglistingrep.js";
import { Link, Link$Outbound } from "./link.js";
import { MemberSummary, MemberSummary$Outbound } from "./membersummary.js";
import { MetricDataSourceRefRep, MetricDataSourceRefRep$Outbound } from "./metricdatasourcerefrep.js";
import { MetricDenominatorRep, MetricDenominatorRep$Outbound } from "./metricdenominatorrep.js";
import { MetricEventDefaultRep, MetricEventDefaultRep$Outbound } from "./metriceventdefaultrep.js";
import { Modification, Modification$Outbound } from "./modification.js";
/**
 * The kind of event the metric tracks
 */
export declare const MetricRepKind: {
    readonly Pageview: "pageview";
    readonly Click: "click";
    readonly Custom: "custom";
    readonly Trace: "trace";
};
/**
 * The kind of event the metric tracks
 */
export type MetricRepKind = ClosedEnum<typeof MetricRepKind>;
/**
 * For custom and trace metrics, the success criteria
 */
export declare const MetricRepSuccessCriteria: {
    readonly HigherThanBaseline: "HigherThanBaseline";
    readonly LowerThanBaseline: "LowerThanBaseline";
};
/**
 * For custom and trace metrics, the success criteria
 */
export type MetricRepSuccessCriteria = ClosedEnum<typeof MetricRepSuccessCriteria>;
/**
 * The method by which multiple unit event values are aggregated
 */
export declare const MetricRepUnitAggregationType: {
    readonly Average: "average";
    readonly Sum: "sum";
    readonly CountDistinct: "count_distinct";
};
/**
 * The method by which multiple unit event values are aggregated
 */
export type MetricRepUnitAggregationType = ClosedEnum<typeof MetricRepUnitAggregationType>;
/**
 * The method for analyzing metric events
 */
export declare const MetricRepAnalysisType: {
    readonly Mean: "mean";
    readonly Percentile: "percentile";
};
/**
 * The method for analyzing metric events
 */
export type MetricRepAnalysisType = ClosedEnum<typeof MetricRepAnalysisType>;
/**
 * The most recent experiment that used this metric
 */
export type LastUsedInExperiment = {
    /**
     * The experiment key
     */
    key: string;
    /**
     * The experiment name
     */
    name: string;
    /**
     * The environment ID
     */
    environmentId: string;
    /**
     * The environment key
     */
    environmentKey: string;
    creationDate: number;
    archivedDate?: number | undefined;
    /**
     * The location and content type of related resources
     */
    links: {
        [k: string]: Link;
    };
};
/**
 * The most recent guarded rollout that used this metric
 */
export type LastUsedInGuardedRollout = {
    /**
     * The guarded rollout release phase ID
     */
    id: string;
    /**
     * The guarded rollout flag key
     */
    flagKey: string;
    /**
     * The guarded rollout flag name
     */
    flagName: string;
    /**
     * The guarded rollout flag purpose
     */
    flagPurpose?: string | undefined;
    /**
     * The guarded rollout environment key
     */
    environmentKey: string;
    /**
     * The guarded rollout environment name
     */
    environmentName: string;
    /**
     * The guarded rollout status
     */
    status: string;
    creationDate: number;
    /**
     * The location and content type of related resources
     */
    links: {
        [k: string]: Link;
    };
};
export type MetricRep = {
    /**
     * The number of experiments using this metric
     */
    experimentCount?: number | undefined;
    /**
     * The number of metric groups using this metric
     */
    metricGroupCount?: number | undefined;
    /**
     * The number of active experiments using this metric
     */
    activeExperimentCount?: number | undefined;
    /**
     * The number of active guarded rollouts using this metric
     */
    activeGuardedRolloutCount?: number | undefined;
    /**
     * The ID of this metric
     */
    id: string;
    /**
     * The version ID of the metric
     */
    versionId: string;
    /**
     * Version of the metric
     */
    version?: number | undefined;
    /**
     * A unique key to reference the metric
     */
    key: string;
    /**
     * A human-friendly name for the metric
     */
    name: string;
    /**
     * The kind of event the metric tracks
     */
    kind: MetricRepKind;
    /**
     * The number of feature flags currently attached to this metric
     */
    attachedFlagCount?: number | undefined;
    /**
     * The location and content type of related resources
     */
    links: {
        [k: string]: Link;
    };
    site?: Link | undefined;
    access?: Access | undefined;
    /**
     * Tags for the metric
     */
    tags: Array<string>;
    creationDate: number;
    lastModified?: Modification | undefined;
    /**
     * The ID of the member who maintains this metric
     */
    maintainerId?: string | undefined;
    maintainer?: MemberSummary | undefined;
    /**
     * Description of the metric
     */
    description?: string | undefined;
    /**
     * The category of the metric
     */
    category?: string | undefined;
    /**
     * For custom and trace metrics, whether to track numeric changes in value against a baseline (<code>true</code>) or to track a conversion when an end user takes an action (<code>false</code>).
     */
    isNumeric?: boolean | undefined;
    /**
     * For custom and trace metrics, the success criteria
     */
    successCriteria?: MetricRepSuccessCriteria | undefined;
    /**
     * For numeric custom and trace metrics, the unit of measure
     */
    unit?: string | undefined;
    /**
     * For custom metrics, the event key to use in your code
     */
    eventKey?: string | undefined;
    /**
     * Deprecated, use <code>analysisUnits</code> instead.
     *
     * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
     */
    randomizationUnits?: Array<string> | undefined;
    /**
     * An array of analysis units allowed for this metric.
     */
    analysisUnits?: Array<string> | undefined;
    filters?: Filter | undefined;
    /**
     * The method by which multiple unit event values are aggregated
     */
    unitAggregationType?: MetricRepUnitAggregationType | undefined;
    /**
     * The method for analyzing metric events
     */
    analysisType?: MetricRepAnalysisType | undefined;
    /**
     * The percentile for the analysis method. An integer denoting the target percentile between 0 and 100. Required when <code>analysisType</code> is <code>percentile</code>.
     */
    percentileValue?: number | undefined;
    eventDefault?: MetricEventDefaultRep | undefined;
    dataSource: MetricDataSourceRefRep;
    lastSeen?: number | undefined;
    /**
     * Whether the metric version is archived
     */
    archived?: boolean | undefined;
    archivedAt?: number | undefined;
    /**
     * For click metrics, the CSS selectors
     */
    selector?: string | undefined;
    urls?: Array<{
        [k: string]: any;
    }> | undefined;
    /**
     * Not yet implemented - The start of the measurement window, in milliseconds relative to the unit's first exposure to a flag variation
     */
    windowStartOffset?: number | undefined;
    /**
     * Not yet implemented - The end of the measurement window, in milliseconds relative to the unit's first exposure to a flag variation
     */
    windowEndOffset?: number | undefined;
    /**
     * Lower winsorization percentile, expressed as a percent in the open interval (0, 100). When both bounds are set, defines a two-sided clamp range. Otherwise lower-only winsorization.
     */
    winsorLowerPercentile?: number | undefined;
    /**
     * Upper winsorization percentile, expressed as a percent in the open interval (0, 100). When both bounds are set, must be greater than winsorLowerPercentile.
     */
    winsorUpperPercentile?: number | undefined;
    /**
     * When true, the percentile bound calculation includes imputed zeros. Only meaningful when at least one bound is set and the metric includes units that didn't send events.
     */
    winsorIncludeImputed?: boolean | undefined;
    /**
     * For trace metrics, the trace query to use for the metric.
     */
    traceQuery?: string | undefined;
    /**
     * For trace metrics, the location in the trace to use for numeric values.
     */
    traceValueLocation?: string | undefined;
    /**
     * For count_distinct metrics, the column to count distinct values of
     */
    unitAggregationField?: string | undefined;
    denominator?: MetricDenominatorRep | undefined;
    experiments?: Array<DependentExperimentRep> | undefined;
    /**
     * Metric groups that use this metric
     */
    metricGroups?: Array<DependentMetricGroupRep> | undefined;
    /**
     * Whether the metric is active
     */
    isActive?: boolean | undefined;
    /**
     * Details on the flags attached to this metric
     */
    attachedFeatures?: Array<FlagListingRep> | null | undefined;
    /**
     * The most recent experiment that used this metric
     */
    lastUsedInExperiment?: LastUsedInExperiment | null | undefined;
    /**
     * The most recent guarded rollout that used this metric
     */
    lastUsedInGuardedRollout?: LastUsedInGuardedRollout | null | undefined;
};
/** @internal */
export declare const MetricRepKind$inboundSchema: z.ZodNativeEnum<typeof MetricRepKind>;
/** @internal */
export declare const MetricRepKind$outboundSchema: z.ZodNativeEnum<typeof MetricRepKind>;
/** @internal */
export declare const MetricRepSuccessCriteria$inboundSchema: z.ZodNativeEnum<typeof MetricRepSuccessCriteria>;
/** @internal */
export declare const MetricRepSuccessCriteria$outboundSchema: z.ZodNativeEnum<typeof MetricRepSuccessCriteria>;
/** @internal */
export declare const MetricRepUnitAggregationType$inboundSchema: z.ZodNativeEnum<typeof MetricRepUnitAggregationType>;
/** @internal */
export declare const MetricRepUnitAggregationType$outboundSchema: z.ZodNativeEnum<typeof MetricRepUnitAggregationType>;
/** @internal */
export declare const MetricRepAnalysisType$inboundSchema: z.ZodNativeEnum<typeof MetricRepAnalysisType>;
/** @internal */
export declare const MetricRepAnalysisType$outboundSchema: z.ZodNativeEnum<typeof MetricRepAnalysisType>;
/** @internal */
export declare const LastUsedInExperiment$inboundSchema: z.ZodType<LastUsedInExperiment, z.ZodTypeDef, unknown>;
/** @internal */
export type LastUsedInExperiment$Outbound = {
    key: string;
    name: string;
    environmentId: string;
    environmentKey: string;
    creationDate: number;
    archivedDate?: number | undefined;
    _links: {
        [k: string]: Link$Outbound;
    };
};
/** @internal */
export declare const LastUsedInExperiment$outboundSchema: z.ZodType<LastUsedInExperiment$Outbound, z.ZodTypeDef, LastUsedInExperiment>;
export declare function lastUsedInExperimentToJSON(lastUsedInExperiment: LastUsedInExperiment): string;
export declare function lastUsedInExperimentFromJSON(jsonString: string): SafeParseResult<LastUsedInExperiment, SDKValidationError>;
/** @internal */
export declare const LastUsedInGuardedRollout$inboundSchema: z.ZodType<LastUsedInGuardedRollout, z.ZodTypeDef, unknown>;
/** @internal */
export type LastUsedInGuardedRollout$Outbound = {
    _id: string;
    flagKey: string;
    flagName: string;
    flagPurpose?: string | undefined;
    environmentKey: string;
    environmentName: string;
    status: string;
    creationDate: number;
    _links: {
        [k: string]: Link$Outbound;
    };
};
/** @internal */
export declare const LastUsedInGuardedRollout$outboundSchema: z.ZodType<LastUsedInGuardedRollout$Outbound, z.ZodTypeDef, LastUsedInGuardedRollout>;
export declare function lastUsedInGuardedRolloutToJSON(lastUsedInGuardedRollout: LastUsedInGuardedRollout): string;
export declare function lastUsedInGuardedRolloutFromJSON(jsonString: string): SafeParseResult<LastUsedInGuardedRollout, SDKValidationError>;
/** @internal */
export declare const MetricRep$inboundSchema: z.ZodType<MetricRep, z.ZodTypeDef, unknown>;
/** @internal */
export type MetricRep$Outbound = {
    experimentCount?: number | undefined;
    metricGroupCount?: number | undefined;
    activeExperimentCount?: number | undefined;
    activeGuardedRolloutCount?: number | undefined;
    _id: string;
    _versionId: string;
    _version?: number | undefined;
    key: string;
    name: string;
    kind: string;
    _attachedFlagCount?: number | undefined;
    _links: {
        [k: string]: Link$Outbound;
    };
    _site?: Link$Outbound | undefined;
    _access?: Access$Outbound | undefined;
    tags: Array<string>;
    _creationDate: number;
    lastModified?: Modification$Outbound | undefined;
    maintainerId?: string | undefined;
    _maintainer?: MemberSummary$Outbound | undefined;
    description?: string | undefined;
    category?: string | undefined;
    isNumeric?: boolean | undefined;
    successCriteria?: string | undefined;
    unit?: string | undefined;
    eventKey?: string | undefined;
    randomizationUnits?: Array<string> | undefined;
    analysisUnits?: Array<string> | undefined;
    filters?: Filter$Outbound | undefined;
    unitAggregationType?: string | undefined;
    analysisType?: string | undefined;
    percentileValue?: number | undefined;
    eventDefault?: MetricEventDefaultRep$Outbound | undefined;
    dataSource: MetricDataSourceRefRep$Outbound;
    lastSeen?: number | undefined;
    archived?: boolean | undefined;
    archivedAt?: number | undefined;
    selector?: string | undefined;
    urls?: Array<{
        [k: string]: any;
    }> | undefined;
    windowStartOffset?: number | undefined;
    windowEndOffset?: number | undefined;
    winsorLowerPercentile?: number | undefined;
    winsorUpperPercentile?: number | undefined;
    winsorIncludeImputed?: boolean | undefined;
    traceQuery?: string | undefined;
    traceValueLocation?: string | undefined;
    unitAggregationField?: string | undefined;
    denominator?: MetricDenominatorRep$Outbound | undefined;
    experiments?: Array<DependentExperimentRep$Outbound> | undefined;
    metricGroups?: Array<DependentMetricGroupRep$Outbound> | undefined;
    isActive?: boolean | undefined;
    _attachedFeatures?: Array<FlagListingRep$Outbound> | null | undefined;
    lastUsedInExperiment?: LastUsedInExperiment$Outbound | null | undefined;
    lastUsedInGuardedRollout?: LastUsedInGuardedRollout$Outbound | null | undefined;
};
/** @internal */
export declare const MetricRep$outboundSchema: z.ZodType<MetricRep$Outbound, z.ZodTypeDef, MetricRep>;
export declare function metricRepToJSON(metricRep: MetricRep): string;
export declare function metricRepFromJSON(jsonString: string): SafeParseResult<MetricRep, SDKValidationError>;
//# sourceMappingURL=metricrep.d.ts.map