import { InjectionToken } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { EmissionMethodTier, NodeType, SchemaType, SiteSiteType, TermTermType } from '@hestia-earth/schema';
import { blankNode } from '../common/node-utils';
import * as i0 from "@angular/core";
export declare const HE_CALCULATIONS_BASE_URL: InjectionToken<string>;
export declare const HE_ORCHESTRATOR_BASE_URL: InjectionToken<string>;
export declare const engineGitUrl: () => string;
export declare const findModels: (models: IModel[], termId: string) => IModel[];
export declare const findMatchingModel: (models: IModel[], model: Partial<IModel>) => IModel;
export declare const modelParams: (node: Partial<blankNode>, includeTerm?: boolean) => {
    [x: string]: string;
};
export declare const modelKeyParams: (node: Partial<blankNode>, key: string) => {
    [x: string]: string;
};
/**
 * Find models from the orchestrator configuration.
 *
 * @param config The orchestrator configuration content.
 * @param termId The `@id` of the Term.
 * @param modelKey The key of the configuration (e.g. "products", "inputs")
 * @param models Optional - list of models from `model-links.json` to default when orchestrator does not contain config.
 * @returns List of models from orchestrator or models if set.
 */
export declare const findConfigModels: (config: IOrchestratorConfig, termId: string, modelKey: string, models?: IModel[]) => IModel[] | IOrchestratorModelConfig[];
export declare const pathToApiDocsPath: (model: string, term?: string) => string;
export interface IModel {
    /**
     * Is model from EcoinventV3.
     */
    ecoinvent: boolean;
    /**
     * Path to the implementation (code) of the model.
     */
    path: string;
    /**
     * Path to the documentation of the model.
     */
    docPath: string;
    /**
     * Path to the API Documentation.
     */
    apiDocsPath?: string;
    /**
     * The name of the model used as `methodModel`.
     */
    model: string;
    /**
     * The term the model is associated with.
     */
    term?: string;
    /**
     * A key in the model if term does not exist.
     */
    modelKey?: string;
}
export interface ICalculationsModelsParams {
    termType?: SchemaType;
    productTermId?: string;
    productTermType?: TermTermType;
    tier?: EmissionMethodTier;
    siteType?: SiteSiteType;
}
export interface ICalculationsRequirementsParams extends ICalculationsModelsParams {
    format?: 'csv';
}
export interface ICalculationsModel {
    model: string;
    key: string;
}
export interface IOrchestratorModelConfig {
    key: string;
    model: string;
    value: string;
    runStrategy: 'always' | 'add_key_if_missing' | 'add_blank_node_if_missing';
    runArgs?: any;
    mergeStrategy: 'default' | 'append' | 'list' | 'node';
    mergeArgs?: any;
}
export interface IOrchestratorConfig {
    models: (IOrchestratorModelConfig | IOrchestratorModelConfig[])[];
}
export declare class HeEngineService {
    private _calculationsBaseUrl;
    private _orchestratorBaseUrl;
    protected http: HttpClient;
    private modelsLoading;
    private modelsLoaded;
    private _models;
    constructor(_calculationsBaseUrl: string, _orchestratorBaseUrl: string, http: HttpClient);
    private init;
    private loadModels;
    private get models$();
    models(includeEcoinvent?: boolean): Promise<IModel[]>;
    model$(model: Partial<IModel>): import("rxjs").Observable<IModel>;
    nodeModel$(node: Partial<blankNode>, key?: string): import("rxjs").Observable<IModel>;
    model(model: Partial<IModel>): Promise<IModel>;
    listModels(params: ICalculationsModelsParams): Promise<{
        models: ICalculationsModel[];
    }>;
    getRequirements(params: ICalculationsRequirementsParams): Promise<any>;
    getTermIds(params: ICalculationsRequirementsParams): Promise<string[]>;
    orchestratorConfigUrl(type?: NodeType): string;
    ochestratorConfig(type: NodeType): Promise<IOrchestratorConfig>;
    static ɵfac: i0.ɵɵFactoryDeclaration<HeEngineService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<HeEngineService>;
}
