import { SerializedUnit, Unit } from "./unit";
import { DataPoint } from "./datapoint";
import { Mdo } from "./mdo";
import { Stats } from "./stats";
import { ModelDelta, DeltaStatus } from "../base/model-delta";
export interface StreamDictionary {
    [index: string]: Stream;
}
export interface SerializedStream {
    id: string;
    project_id: string;
    project: string;
    slug: string;
    device: string;
    variable: string;
    raw_value_format: string;
    data_label: string;
    input_unit: SerializedUnit;
    output_unit: SerializedUnit;
    mdo_type: string;
    mdo_label: string;
    multiplication_factor: number;
    division_factor: number;
    offset: number;
    type: string;
    created_on: string;
    enabled: boolean;
}
export declare class Stream {
    [key: string]: any;
    id: string;
    slug: string;
    variable: string;
    device: string;
    project: string;
    enabled: boolean;
    createdOn: string;
    type: string;
    projectId: string;
    data: Array<DataPoint>;
    mdo: Mdo;
    inputUnit: Unit | null;
    outputUnit: Unit | null;
    template?: string;
    org?: string;
    block?: string;
    variableName?: string;
    variableType?: string;
    variableLocalId?: number;
    mdoType?: string;
    dataLabel?: string;
    stats?: Stats;
    isModified?: boolean;
    rawValueFormat?: string;
    private _rawData;
    constructor(data?: any);
    loadData(data: any): void;
    toJson(): SerializedStream;
    addStats(stats: Stats): void;
    addData(data: Array<DataPoint>): void;
    getLocalVarId(): string;
    resetData(): void;
    getPatchPayload(): any;
}
export declare abstract class StreamDelta extends ModelDelta<Stream> {
}
export declare class StreamLabelDelta extends StreamDelta {
    private oldLabel;
    private newLabel;
    static ClassName: string;
    constructor(oldLabel: string, newLabel: string, slug: string, guid?: string);
    check(stream: Stream): DeltaStatus;
    apply(stream: Stream): void;
    getPatch(): {};
    protected serializeArguments(): {};
    static Deserialize(guid: string, slug: string, serializedArgs: any): StreamLabelDelta;
}
export declare class StreamMDODelta extends StreamDelta {
    private oldMDO;
    private oldType;
    private newMDO;
    private newType;
    static ClassName: string;
    constructor(oldMDO: Mdo, oldType: string, newMDO: Mdo, newType: string, slug: string, guid?: string);
    check(stream: Stream): DeltaStatus;
    apply(stream: Stream): void;
    getPatch(): {};
    protected serializeArguments(): {};
    static Deserialize(guid: string, slug: string, serializedArgs: any): StreamMDODelta;
}
export declare enum UnitType {
    Input = 0,
    Output = 1
}
export declare class StreamUnitsDelta extends StreamDelta {
    private oldUnit;
    private newUnit;
    private type;
    constructor(oldUnits: Unit | null, newUnits: Unit, type: UnitType, slug: string, classname: string, guid?: string);
    private getSlug;
    check(stream: Stream): DeltaStatus;
    apply(stream: Stream): void;
    getPatch(): {};
    protected serializeArguments(): {};
}
export declare class StreamInputUnitsDelta extends StreamUnitsDelta {
    static ClassName: string;
    constructor(oldUnits: Unit | null, newUnits: Unit, slug: string, guid?: string);
    static Deserialize(guid: string, slug: string, serializedArgs: any): StreamInputUnitsDelta;
}
export declare class StreamOutputUnitsDelta extends StreamUnitsDelta {
    static ClassName: string;
    constructor(oldUnits: Unit | null, newUnits: Unit, slug: string, guid?: string);
    static Deserialize(guid: string, slug: string, serializedArgs: any): StreamOutputUnitsDelta;
}
