import { MessagePublisher } from "./messagepublisher";
import { MessageSubscriber } from "./messagesubscriber";
import { MessagePublisherPolicy, LevelMode } from "./messagepublisherpolicies";
export type TypedObject<T> = {
    [key: string]: T;
};
export type ConfigurationType = "datamodel";
export type PolicyType = "send" | "history";
export type PlatformConfigurationInterfaceType = "properties" | "datastream";
export type PlatformAggregationType = "object" | "individual";
export type OwnershipType = "device" | "server";
export type ModelBasicType = "integer" | "double" | "string" | "boolean" | "bytestring" | "integerarray" | "doublearray" | "booleanarray" | "binaryblob";
export type ModelObjectType = "object";
export type ModelArrayType = "array";
export type ModelStructType = "struct";
export type MappingModeType = "R" | "RW";
export interface ModelBasic {
    type: ModelBasicType;
    description?: string;
    label?: string;
    unit?: string;
    tags?: string[];
    version?: string;
    deprecated?: boolean;
}
export interface ModelArray {
    UUID?: string;
    type: ModelArrayType;
    length: number;
    item: ModelObject;
    description?: string;
    label?: string;
    unit?: string;
    tags?: string[];
    version?: string;
    deprecated?: boolean;
}
export interface ModelObject {
    UUID?: string;
    type: ModelObjectType;
    instanceOf: string;
    properties: TypedObject<ModelNode>;
    description?: string;
    label?: string;
    unit?: string;
    tags?: string[];
    version?: string;
    deprecated?: boolean;
}
export interface ModelStruct {
    UUID?: string;
    type: ModelStructType;
    instanceOf: string;
    properties: TypedObject<ModelBasic>;
    description?: string;
    label?: string;
    unit?: string;
    tags?: string[];
    version?: string;
    deprecated?: boolean;
}
export interface ModelMetadata {
    path: string;
    label?: string;
    description?: string;
    unit?: string;
    tags?: string[];
    type?: ModelType;
    version?: string;
    instanceOf?: string;
}
export type ModelNode = ModelBasic | ModelArray | ModelInterfaceCreatable;
export type ModelInterfaceCreatable = ModelObject | ModelStruct;
export type ModelType = ModelBasicType | ModelObjectType | ModelArrayType | ModelStructType;
export interface BasePolicyData {
    type: PolicyType;
    instanceOf?: string;
    [key: string]: any;
}
export interface MappingData {
    device_endpoint: string;
    server_endpoint?: string;
}
export interface MappingHistoryPolicy {
    enabled: boolean;
    limit?: string;
    compressionStrategy?: string;
}
export interface MappingSendPolicyTrigger {
    type: "timer" | "onchange" | "onlevel" | "fieldchange" | "fieldlevel";
    [key: string]: any;
}
export interface OnChangeTrigger extends MappingSendPolicyTrigger {
    minIntervalMs?: number;
    tagName?: string;
    skipFirstNChanges?: number;
    deadband?: number;
    deadbandPercent?: number;
    changeMask?: "value" | "timestamp" | "value|timestamp";
}
export interface IntervalTrigger extends MappingSendPolicyTrigger {
    intervalMs: number;
    type: "timer";
}
export interface OnLevelTrigger extends MappingSendPolicyTrigger {
    minIntervalMs?: number;
    tagName?: string;
    skipFirstNChanges?: number;
    level?: number;
    levelString?: string;
    mode?: LevelMode;
    deadband?: number;
    deadbandPercent?: number;
    changeMask?: "value" | "timestamp" | "value|timestamp";
    type: "onlevel";
}
export interface OnFieldChangeTrigger extends MappingSendPolicyTrigger {
    minIntervalMs?: number;
    tagName?: string;
    fieldName?: string;
    skipFirstNChanges?: number;
    deadband?: number;
    deadbandPercent?: number;
    changeMask?: "value" | "timestamp" | "value|timestamp";
    type: "fieldchange";
}
export interface OnFieldLevelTrigger extends MappingSendPolicyTrigger {
    minIntervalMs?: number;
    fieldName?: string;
    skipFirstNChanges?: number;
    level?: number;
    levelString?: string;
    mode?: LevelMode;
    deadband?: number;
    deadbandPercent?: number;
    changeMask?: "value" | "timestamp" | "value|timestamp";
    type: "fieldlevel";
}
export interface MappingSendPolicyCondition {
    type: "and" | "or" | "inband" | "outband";
}
export interface LogicCondition extends MappingSendPolicyCondition {
    type: "and" | "or";
    operands: MappingSendPolicyCondition[];
}
export interface InOutBandCondition extends MappingSendPolicyCondition {
    type: "inband" | "outband";
    low: number;
    high: number;
    tagName: string;
}
export interface MappingSendPolicy {
    triggers: MappingSendPolicyTrigger[];
    conditions?: MappingSendPolicyCondition;
}
export interface SendPolicyData extends BasePolicyData, MappingSendPolicy {
}
export interface HistoryPolicyData extends BasePolicyData, MappingHistoryPolicy {
}
export type PolicyData = SendPolicyData | HistoryPolicyData;
export interface MappingDatalink {
    source: string;
}
export interface MappingAdditionalInfo {
    mode?: MappingModeType;
    historyPolicy?: MappingHistoryPolicy;
    sendPolicy?: MappingSendPolicy;
    datalink?: MappingDatalink;
}
export interface MappingInfo {
    mapping?: MappingData;
}
export interface MappingBasic extends ModelBasic, MappingAdditionalInfo {
}
export interface MappingObject extends ModelObject, MappingAdditionalInfo {
    properties: TypedObject<MappingNode>;
}
export interface MappingArray extends ModelArray, MappingAdditionalInfo {
    item: MappingObject;
}
export interface MappingStruct extends ModelStruct, MappingAdditionalInfo {
    properties: TypedObject<MappingBasic>;
}
export type MappingNode = MappingBasic | MappingArray | MappingInterfaceCreatable;
export type MappingInterfaceCreatable = MappingObject | MappingStruct;
export interface DeviceConfigurationBasic extends MappingBasic, MappingInfo {
}
export interface DeviceConfigurationArray extends MappingArray, MappingInfo {
    item: DeviceConfigurationObject;
}
export interface DeviceConfigurationObject extends MappingObject, MappingInfo {
    properties: TypedObject<DeviceConfigurationNode>;
}
export interface DeviceConfigurationStruct extends MappingStruct, MappingInfo {
    properties: TypedObject<DeviceConfigurationBasic>;
}
export type DeviceConfigurationWithProperties = DeviceConfigurationObject | DeviceConfigurationStruct;
export type DeviceConfigurationNode = DeviceConfigurationBasic | DeviceConfigurationArray | DeviceConfigurationWithProperties;
export interface MappingsData {
    endpoint: string;
    type: ModelBasicType | ModelStructType;
    explicit_timestamp?: boolean;
}
export interface InterfaceData {
    interface_name: string;
    version_major: number;
    version_minor: number;
    type: PlatformConfigurationInterfaceType;
    ownership: OwnershipType;
    aggregation?: PlatformAggregationType;
    mappings: MappingsData[];
}
export interface ConfigurationData {
    UUID: string;
    type: ModelObjectType;
    instanceOf: string;
    policies?: TypedObject<PolicyData>;
    interfaces: InterfaceData[];
    properties: TypedObject<DeviceConfigurationNode>;
}
export interface DeviceConfigurationData {
    type: ConfigurationType;
    properties: TypedObject<ConfigurationData>;
}
export declare function indexTemplateApply(templateString: string, values: number[]): string;
export interface DeviceConfiguration {
    interfaceNames: string[];
    tagPublishers: Map<string, Set<MessagePublisher>>;
    namedPolicies: Map<string, MessagePublisherPolicy>;
    subscribedTopics: Map<string, MessageSubscriber>;
}
export default function parseDeviceConfig(config: DeviceConfigurationData): DeviceConfiguration;
//# sourceMappingURL=configparser.d.ts.map