import { CollectionViewer, SelectionChange } from '@angular/cdk/collections';
import { FlatTreeControl } from '@angular/cdk/tree';
import { EventEmitter, OnInit } from '@angular/core';
import { UntypedFormControl } from '@angular/forms';
import { BehaviorSubject, Observable } from 'rxjs';
import { TccKeyValuePair, TccTranslation } from '../../../odata/models/shared.model';
import { TccET_C4 } from '../../../odata/models/c4.model';
import { TccODataServiceFactory } from '../../../odata/factories/tcc-odata-service/tcc-odata-service.factory';
import { isNodeCheckedPipe } from '../../pipes/tcc-c4tree/isNodeChecked.pipe';
import { TccLibIcons } from '../../../shared/classes/tcc-register-icons.class';
import { MatCheckboxChange } from '@angular/material/checkbox';
interface c4TreeNode {
    Path: string;
    Name: string;
    DisplayName: TccTranslation;
    Description: TccTranslation;
    Id: string;
    Level: number;
    IsLoading: boolean;
    IsExpandable: ExpandableState;
    TryOpen?: true;
}
interface mappedNodes {
    childrenFetched: boolean;
    nodes: Array<c4TreeNode>;
}
export interface selectedNode {
    Path: string;
    Recursive: boolean;
}
declare enum ExpandableState {
    unknown = 0,
    expandable = 1,
    unexpandable = 2,
    error = 3,
    loadable = 4
}
declare class DynamicDatabase {
    private factory;
    private treeControl;
    nodesChanged: BehaviorSubject<c4TreeNode[]>;
    forbiddenPaths: string[];
    private nodeMap;
    private OrderBy;
    private selectarr;
    private service;
    constructor(factory: TccODataServiceFactory, treeControl: FlatTreeControl<c4TreeNode>);
    /** Initial data from database */
    initialData(): Observable<c4TreeNode[]>;
    buildSelectedPathsData(selectedPaths: Array<selectedNode>): c4TreeNode[];
    buildSelectedPathData(selectedPath: selectedNode, treeNodes: {
        [path: string]: c4TreeNode;
    }): void;
    getSiblings(node: c4TreeNode): Observable<c4TreeNode[]>;
    showInner(nodes: mappedNodes, str: string): string;
    showDatabase(): void;
    getChildren(node: c4TreeNode): Observable<c4TreeNode[]> | undefined;
    private getNextLevelChildren;
    private fetchChildNodes;
    private buildRequest;
    transformTccC4Node(node: TccET_C4.Node<any>, level: number): c4TreeNode;
    private sortInNodes;
    private checkForNode;
    buildFilter(path: string, targetLevel: number): string;
    /**
     * for forbidden paths ["/CLARC/SYS"]
     * @returns  "(not ((Path/Items/0 eq 'CLARC') and (Path/Items/1 eq 'SYS'))) and "
     */
    buildForbiddenPathFilter(): string;
    getParentPath(path: string): string;
    getPathLevel(path: string): number;
}
export declare class DynamicDataSource {
    private treeControl;
    private database;
    dataChange: BehaviorSubject<c4TreeNode[]>;
    get data(): c4TreeNode[];
    set data(value: c4TreeNode[]);
    refreshData(): void;
    constructor(treeControl: FlatTreeControl<c4TreeNode>, database: DynamicDatabase);
    connect(collectionViewer: CollectionViewer): Observable<c4TreeNode[]>;
    showData(): void;
    handleSelectedNodes(nodes: selectedNode[]): Array<c4TreeNode>;
    loadSelectedNode(node: c4TreeNode): void;
    /** Handle expand/collapse behaviors */
    handleTreeControl(change: SelectionChange<c4TreeNode>): void;
    /**
     * Toggle the node, remove from display list
     */
    toggleNode(node: c4TreeNode, expand: boolean): void;
}
export declare class TccC4treeComponent implements OnInit {
    NodeClick: EventEmitter<{
        Id: string;
        name: string;
        path: string;
    }>;
    showObject: boolean;
    showIcons: boolean;
    selectable: boolean;
    set selectedNodes(nodes: Array<selectedNode>);
    search: boolean;
    forbiddenPaths: string[];
    SelectionChange: EventEmitter<Array<selectedNode>>;
    IconLib: typeof TccLibIcons.Icon;
    private selectedNodesSet;
    treeControl: FlatTreeControl<c4TreeNode>;
    dataSource: DynamicDataSource;
    private service;
    c4objectproperties: Array<TccKeyValuePair>;
    activeNode: string;
    _selectedNodes: Array<selectedNode>;
    _trigger: boolean;
    _searchtext: string;
    searchForm: UntypedFormControl;
    database: DynamicDatabase;
    nodeCheck: isNodeCheckedPipe;
    constructor(factory: TccODataServiceFactory);
    private filterForbiddenPaths;
    ngOnInit(): void;
    fetchObject(nodeid: string): Observable<TccET_C4.Node<any>>;
    getLevel(node: c4TreeNode): number;
    isExpandable(node: c4TreeNode): boolean;
    isLoading: (_: number, _nodeData: c4TreeNode) => boolean;
    hasChildren: (_: number, _nodeData: c4TreeNode) => boolean;
    isError: (_: number, _nodeData: c4TreeNode) => boolean;
    isLoadable: (_: number, _nodeData: c4TreeNode) => boolean;
    OnNodeClick(node: c4TreeNode): void;
    private normalizePath;
    checkboxchange(event: MatCheckboxChange, node: c4TreeNode): void;
    OnRefreshClick(node: c4TreeNode): void;
    searchfieldkeyup(event: any): void;
}
export {};
