/**
* Copyright Super iPaaS Integration LLC, an IBM Company 2024
*/

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 { Project } from "../../lfs/models/project.model.js";
import { VCSFileInfo } from "../../vcs/models/vcs-file-info.model.js";
import { VCSProject } from "../../vcs/models/vcs-project.model.js";
import { 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 FormOperationResponse {
    data: string;
    file: FileSystemFileHandle | VCSFileInfo;
}

export interface ApiFormOperationResponse {
    api: FormOperationResponse;
    spec: FormOperationResponse;
}

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): Promise<Response<FileExplorerNode>>;

    createFile(parentNode: FileExplorerNode, fileName: string, project: Project | VCSProject): Promise<Response<FileExplorerNode>>;

    createDirectory(parentNode: FileExplorerNode, directoryName: string, project: Project | VCSProject): Promise<Response<FileExplorerNode>>;

    deleteFile(node: FileExplorerNode, project: Project | VCSProject): Promise<Response>;

    deleteDirectory(node: FileExplorerNode, project: Project | VCSProject): Promise<Response>;

    renameFile(node: FileExplorerNode, newName: string, project: Project | VCSProject): Promise<Response<FileExplorerNode>>;

    duplicateFile(parentNode: FileExplorerNode, node: FileExplorerNode, project: Project | VCSProject): Promise<Response<FileExplorerNode>>;

    createAPIFileFromScratch(ApiFormData: AddApiFromScratchFormData, active: Project | VCSProject): Promise<ApiFormOperationResponse>;

    createAPIFileFromFile(ApiFormData: AddApiFromFileFormData, active: Project | VCSProject): Promise<ApiFormOperationResponse>;

    createAPIFileFromUrl(ApiFormData: AddApiFromUrlFormData, active: Project | VCSProject): Promise<ApiFormOperationResponse>;

    createTestFileFromScratch(TestFormData: Metadata, active: Project | VCSProject, kind: string): Promise<FileSystemFileHandle | VCSFileInfo>;

    createPolicyFileFromScratch(policyFromData: Metadata, active: Project | VCSProject): Promise<FormOperationResponse>;

    createGlobalPolicyFileFromScratch(policyFromData: Metadata, active: Project | VCSProject): Promise<FormOperationResponse>;

    createPolicyKindFileFromScratch(policyKind: string, policyFromData: Metadata, active: Project | VCSProject): Promise<FormOperationResponse>;

}
