/**
 * Copyright Super iPaaS Integration LLC, an IBM Company 2024
 */
import { VCSConfigData } from "../../vcs/models/vcs-config-data.model.js";
import { VCSRepoData } from "../../vcs/models/vcs-repo-data.model.js";
import { BranchProjectInfo } from "../../vcs/models/branch-project-info.model.js";
import { ChangedItem } from "../../vcs/models/changed-item.model.js";

export interface IStudioVcsIndexedDbHandler {
  setVCSConfig(configData: VCSConfigData): Promise<void>;
  getVCSConfig(): Promise<VCSConfigData | void>;
  setRemoteRepository(remoteRepoData: VCSRepoData[]): Promise<void>;
  getRemoteRepositories(): Promise<VCSRepoData[] | void>;
  setRepoProjectsData(
    repoNameWithOwner: string,
    branchProjectInfo: BranchProjectInfo
  ): Promise<void>;
  getRepoProjectsData(
    repoNameWithOwner: string
  ): Promise<BranchProjectInfo | void>;
  updateChangedItem(
    repoNameWithOwner: string,
    branchName: string,
    changedItem: ChangedItem,
    isChangeDiscarded: boolean
  ): Promise<void>;
  deleteBranchChangedItems(
    repoNameWithOwner: string,
    branchName: string
  ): Promise<void>;
  setAllChangedItems(
    repoNameWithOwner: string,
    branchName: string,
    changedItems: ChangedItem[]
  ): Promise<void>;
  getAllChangedItems(
    repoNameWithOwner: string,
    branchName: string
  ): Promise<ChangedItem[] | void>;
  setLastCommitId(
    repoNameWithOwner: string,
    branchName: string,
    lastCommitId: string
  ): Promise<void>;
  getLastCommitId(
    repoNameWithOwner: string,
    branchName: string
  ): Promise<string | null>;
  deleteLastCommitId(
    repoNameWithOwner: string,
    branchName: string
  ): Promise<void>;
  deleteRepository(repoNameWithOwner: string): Promise<void>;
  deleteAllRepositoryData(): Promise<void>;
  copyBranchSpecificChangedItemsToCreatedBranch(repoNameWithOwner: string, BasebranchName: string, NewbranchName: string): Promise<void>;

}
