/**
 * Copyright IBM Corp. 2024, 2025
 */
import { APICFileInfo } from '../../apic-mode/models/apic-file-info.model.js';
import { APICProject } from '../../apic-mode/models/apic-project.model.js';
import { AddApiFromFileFormData } from '../../component-models/models/add-api-from-file-form-data.model.js';
import { AddApiFromScratchFormData } from '../../component-models/models/add-api-from-scratch-form-data.model.js';
import { AddApiFromUrlFormData } from '../../component-models/models/add-api-from-url-form-data.model.js';
import { FileAccessType, ProjectType, SpecObject } from '../../index.js';
import { Project } from '../../lfs/models/project.model.js';
import { AssetDependencies } from '../../store/model/asset-dependency.model.js';
import { VCSFileInfo } from '../../vcs/models/vcs-file-info.model.js';
import { VCSProject } from '../../vcs/models/vcs-project.model.js';
import { BaseAsset, KindMetadata, Metadata } from '../models/base-asset.model.js';
import { FileExplorerNode } from '../models/file-explorer.model.js';
import { Response } from '../models/response-wrapper.js';
export interface VCShandle {
    repoNameWithOwner: string;
    name: string;
}
export interface APIChandle {
    orgId: string;
    name: string;
}
export interface FormOperationResponse {
    data: string;
    file: FileSystemFileHandle | VCSFileInfo | APICFileInfo;
}
export interface ApiFormOperationResponse {
    api: FormOperationResponse;
    spec: FormOperationResponse;
    datapowerAssembly?: FormOperationResponse | null;
    freeFlowPolicySequence?: FormOperationResponse | null;
    cors?: FormOperationResponse | null;
    properties?: FormOperationResponse | null;
}
export interface IFileExplorerOperationsHandler {
    /**
     * Generates the tree of objects with required info to construct the file explorer window.
     * @param projectFolderEntity The parent entity to build file explorer tree from. The projectFolderEntity can either be a directory handle or a vcs tree entry.
     * @returns A file explorer node representing the transformed equivalent of the given folder to be used for rendering the File explorer.
     */
    buildTree(projectFolderEntity: FileSystemDirectoryHandle | VCShandle | APIChandle, parentFolderEntity: FileSystemDirectoryHandle | VCShandle | APIChandle, id?: string, project?: APICProject): Promise<Response<FileExplorerNode>>;
    createFile(parentNode: FileExplorerNode, fileName: string, project: Project | VCSProject | APICProject): Promise<Response<FileExplorerNode>>;
    createDirectory(parentNode: FileExplorerNode, directoryName: string, project: Project | VCSProject | APICProject): Promise<Response<FileExplorerNode>>;
    deleteFile(node: FileExplorerNode, project: Project | VCSProject | APICProject): Promise<Response>;
    deleteDirectory(node: FileExplorerNode, project: Project | VCSProject | APICProject): Promise<Response>;
    renameFile(node: FileExplorerNode, newName: string, project: Project | VCSProject | APICProject): Promise<Response<FileExplorerNode>>;
    duplicateFile(parentNode: FileExplorerNode, node: FileExplorerNode, project: Project | VCSProject): Promise<Response<FileExplorerNode>>;
    getSelectedFolderPath(fileExplorerInfo: {
        selectedNode: FileExplorerNode | null;
    }): string;
    createAPIFileFromScratch(ApiFormData: AddApiFromScratchFormData, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<ApiFormOperationResponse>;
    createAPIFileFromFile(ApiFormData: AddApiFromFileFormData, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<ApiFormOperationResponse>;
    createAPIFileFromUrl(ApiFormData: AddApiFromUrlFormData, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<ApiFormOperationResponse>;
    createTestFileFromScratch(TestFormData: Metadata, active: Project | VCSProject | APICProject, kind: string, selectedFolder?: string): Promise<FileSystemFileHandle | VCSFileInfo | APICFileInfo>;
    createCountLimitDefFromScratch(countLimitDefData: KindMetadata, active: Project | VCSProject | APICProject, spec: object, selectedFolder?: string): Promise<FileSystemFileHandle | VCSFileInfo | APICFileInfo>;
    createPolicyFileFromScratch(policyFromData: KindMetadata, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<FormOperationResponse>;
    createFreeFlowPolicyFileFromScratch(policyFromData: KindMetadata, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<FormOperationResponse>;
    createGlobalPolicyFileFromScratch(policyFromData: KindMetadata, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<FormOperationResponse>;
    createPolicyKindFileFromScratch(policyKind: string, policyFromData: KindMetadata, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<FormOperationResponse>;
    createDatapowerAssemblyFileFromScratch(datapowerFormData: KindMetadata, active: Project | VCSProject | APICProject, selectedFolder?: string): Promise<FormOperationResponse>;
    generateGatewayPolicyFileFromFile(active: Project | VCSProject | APICProject, datapowerContent: string, selectedFolder?: string): Promise<FormOperationResponse>;
    createMcpKindFileFromScratch(asset: BaseAsset, active: Project | VCSProject | APICProject): Promise<FormOperationResponse>;
    updateApiMetadata(newFormData: AddApiFromScratchFormData, existingApiFileHandle: FileSystemFileHandle | VCSFileInfo | APICFileInfo, active: Project | VCSProject | APICProject): Promise<FormOperationResponse>;
    generateXSLT(fileName: string, active: Project | VCSProject | APICProject, content: string): Promise<FormOperationResponse>;
    handleDragAndDrop(sourceNode: FileExplorerNode, targetNode: FileExplorerNode, onError: (title: string, subtitle: string) => void, getEditorId: (file: FileSystemFileHandle | VCSFileInfo | APICFileInfo) => number, handleCloseTab: (id: number) => Promise<void>, active: Project | VCSProject | APICProject, data: AssetDependencies, saveFile: (file: FileSystemFileHandle | VCSFileInfo | APICFileInfo, fileContent: string) => Promise<boolean>): Promise<void>;
    /**
     * Returns the spec object template for a given policy kind
     */
    getSpecForKind(policyKind: string): SpecObject;
    /**
     * Wrapper function to write across all supported project modes.
     */
    writeToFile(project: ProjectType, file: FileAccessType, fileContent: string): Promise<void>;
}
//# sourceMappingURL=file-explorer-handler.interface.d.ts.map