export type SourceType = "ContentVersion" | "Attachment";

export interface ArchiveSource {
  sourceType: SourceType;
  sourceRecordId: string;
  contentDocumentId: string | null;
  fileName: string;
  fileSizeBytes: number;
  downloadPath: string;
}

export interface ArchiveTarget {
  archiveKey: string;
  parentRecordId: string;
  parentObjectApiName: string;
  sharePointPath: string;
}

export interface ArchiveWorkItem {
  source: ArchiveSource;
  targets: ArchiveTarget[];
}

export interface ArchiveAudit {
  Archive_Key__c: string;
  Archive_Status__c: "Success" | "Failed" | "Skipped";
  SharePoint_File_Url__c?: string;
  Graph_Item_Id__c?: string;
}

export interface DriveItem {
  id: string;
  name?: string;
  size: number;
  webUrl: string;
}

export interface AccessToken {
  accessToken: string;
  expiresAt: number;
}

export interface SalesforceAccessToken extends AccessToken {
  instanceUrl: string;
}

export interface TokenProvider<T extends AccessToken = AccessToken> {
  getToken(forceRefresh?: boolean): Promise<T>;
}
