import { Emission, ITermJSONLD, Product, Input as HestiaInput, NodeType, TermTermType, Property, SchemaType } from '@hestia-earth/schema';
import { IOrchestratorConfig, IModel } from '../../engine/engine.service';
export interface INodeMissingLookupLog {
    filename: string;
    termId: string;
    column: string;
    model?: string;
    term?: string;
    key?: string;
}
export interface INodeTermLog {
    runRequired?: boolean;
    shouldRun?: boolean;
    shouldRunOrchestrator?: boolean;
    missingLookups?: INodeMissingLookupLog[];
    requirements?: {
        [key: string]: any;
    };
    logs?: {
        [key: string]: any;
    };
    [key: string]: any;
    input?: string | string[];
    property?: string | string[];
}
export interface INodeTermLogs {
    [modelKey: string]: any | INodeTermLog;
    models: string[];
    isKey: boolean;
}
export interface INodeLogs {
    [term: string]: INodeTermLogs;
}
export declare const groupLogsByModel: (data: string) => INodeLogs;
export declare const computeTerms: (originalValues: blankNode[], recalculatedValues: blankNode[], terms?: ITermJSONLD[], filterTermTypes?: TermTermType[]) => Promise<any>;
export declare type blankNode = Emission | Product | HestiaInput | Property;
export declare enum LogStatus {
    success = "successful",
    error = "failed",
    skipHierarchy = "not run (model higher up hierarchy run instead)",
    dataProvided = "not run (user provided data retained)",
    notRequired = "not relevant"
}
export interface IConfigModel {
    methodId: string;
    logs?: INodeTermLog;
    hasLogs?: boolean;
    status?: LogStatus;
    model?: IModel;
}
export interface IBlankNodeLogSubValue {
    key: string;
    originalValue: number | string | boolean;
    recalculatedValue: number | string | boolean;
    isRecalculated: boolean;
    isRequired?: boolean;
    id?: any;
    configModels?: IConfigModel[];
    logs?: INodeTermLogs;
}
export interface IBlankNodeLog {
    isOpen: boolean;
    canOpen: boolean;
    term: ITermJSONLD;
    termId: string;
    type?: SchemaType;
    configModels: (IConfigModel | IConfigModel[])[];
    original: blankNode[];
    originalValue: number;
    originalValueByMethodId?: {
        [methodId: string]: number;
    };
    recalculated: blankNode[];
    recalculatedValue: number;
    recalculatedValueByMethodId?: {
        [methodId: string]: number;
    };
    isOriginal: boolean;
    isRecalculated: boolean;
    hasData: boolean;
    isRequired: boolean;
    logs?: INodeTermLogs;
    keys: IBlankNodeLogSubValue[];
    subValues: IBlankNodeLogSubValue[];
    allParallel?: boolean;
}
export declare const groupLogsByTerm: (nodeType: NodeType, logs: INodeLogs, models: IModel[], config: IOrchestratorConfig, allOriginalValues: blankNode[], allRecalculatedValues: blankNode[], nodeKey?: string) => (term: ITermJSONLD) => IBlankNodeLog;
export declare const modelCount: (blankNodeLogs: IBlankNodeLog[]) => any;
