/**
 * 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 { 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 {
  AssetDependencies,
  AssetDependencyInfo,
} from '../model/asset-dependency.model.js';

export interface IAssetDependencyHandler {
  getAssetDependenciesFromProject(
    project: Project | VCSProject | APICProject,
  ): Promise<AssetDependencyInfo[]>;
  getAssetDependencyForFile(
    file: FileSystemFileHandle | VCSFileInfo | APICFileInfo,
    project: Project | VCSProject | APICProject,
  ): Promise<AssetDependencyInfo | null>;
  handleReferenceUpdateOnDragAndDrop(
    fileToBeMoved: FileSystemFileHandle | VCSFileInfo | APICFileInfo,
    sourcePath: string,
    destinationPath: string,
    data: AssetDependencies,
    saveFile: (
      file: FileSystemFileHandle | VCSFileInfo | APICFileInfo,
      fileContent: string,
    ) => Promise<boolean>,
    newFileName?: string,
  ): Promise<void>;
}
