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

import { Response } from "../../common/models/response-wrapper.js";
import { Project } from "../../lfs/models/project.model.js";
import { RootDirectoryInfo } from "../../lfs/models/root-directory-info.model.js";
import { VCSProject } from "../../vcs/models/vcs-project.model.js";

export interface ILocalProjectsHandler {
  /**
   * Loads projects from root directory handles from indexed db
   */
  getProjectsFromAllRootDirectories(): Promise<Response<Project[]>>;
  /**
   * Loads projects from given root directory handles
   * @param rootDirectories List of root directories to fetch projects from
   */
  getProjectsFromRootDirectories(rootDirectories: RootDirectoryInfo[]): Promise<Response<Project[]>>;
  /**
   * Loads projects from given root directory handle
   * @param rootDirectory Root directory to fetch project from
   */
  getProjectsFromRootDirectory(rootDirectory: RootDirectoryInfo): Promise<Response<Project[]>>;

  createNewAPIProject(newProject: Project, fileList?: File[]): Promise<Response<Project>>;
  getProjectDirHandle(project: Project): Promise<FileSystemDirectoryHandle | null>; // get project directory handle from project
  /**
   * Updates the project in .apistudio-projects file and renames project folder if project name is updated.
   * @param existingProject The original version of project
   * @param updatedProject Project with updated metadata
   */
  updateProject(existingProject: Project, updatedProject: Project): Promise<void>;
  /**
   * Deletes the given list of local projects.
   * @param projects List of local projects that have been selected for delete
   */
  deleteProjects(projects: Project[]): Promise<void>;
}
