import {EtlFile} from "etl-typings";
//
//
//
export interface ProcessFileWithFlowOptions {
  etlFile: EtlFile;
  fileEncryptionPassword?: string;
  flowName: string;
  operationUUID: string;
}

//
//
//
export interface Status {
  startTime?: Date;
  currentTime?: Date;
  endTime?: Date;
  status?: string;
}
export interface Tagged {
  tag?: any
}
export interface Validatable {
  targetFolder?: string;
  validate();
}
//
// FullPipeline
//
export interface FullPipeline extends Validatable, Tagged {
  fromArgv(argv: any);
  fromJson(json: string);
  toJson(): string;
  fromJsonFile(jsonFile: string);
  toJsonFile(jsonFile: string);
  decryptAndUnTarOptions: DecryptAndUnTarOptions;
  unZipFileOptions?: UnZipFileOptions;
  mergePcapFilesOptions?: MergePcapFilesOptions;
}
export interface ProcessFullPipelineStatus extends Status, Tagged {
  decryptAndUnTarStatus?: DecryptAndUnTarStatus;
  unZipFileStatus?: UnZipFileStatus;
  mergePcapFilesStatus?: MergePcapFilesStatus;
}
export interface ProcessFullPipelineResult extends Status, Tagged {
  error?: Error;
  decryptAndUnTarResults?: DecryptAndUnTarResult[];
  unZipFileResults?: UnZipFileResult[][];
  mergePcapFilesResult?: MergePcapFilesResult;
}
//
// MergePcapFiles
//
export interface MergePcapFilesOptions extends Validatable {
  fromArgv(argv: any);
  pcapFiles?: string[];
  deleteOriginalPcapFiles?: boolean;
  mergedPcapFile?: string;
}
export interface MergePcapFilesStatus extends TaskStatus {
}
export interface MergePcapFilesResult {
  error: Error;
  mergedPcapFile: string;
}
export interface ParallelMergePcapFilesResult {
  inFile0: string;
  inFile1: string;
  outFile: string;
  outFileStats: string;
  error: Error;
}
//
// CopyFile
//
export interface CopyFileResult {
  error: Error;
  inFile: string;
  outFile: string;
}
//
// UnZipFile
//
export interface UnZipFileOptions extends Validatable {
  zippedFiles?: string[];
  deleteOriginalZipFile?: boolean;
  foldersOfZippedFiles?: string[];
}
export interface UnZipFileStatus extends TaskStatus {

}
export interface UnZipFileResult {
  zippedFilePath: string;
  unzippedFilePath?: string;
  error?: Error;
}
//
// DecryptAndUnTar
//
export interface DecryptAndUnTarOptions extends Validatable {
  fromArgv(argv: any);
  encryptedFiles?: string[];
  foldersOfEncryptedFiles?: string[];
  encryptedFilePattern?: RegExp;
  password: string;
}
export interface TaskStatus {
  taskName: string,
  current: number,
  total: number
}
export interface DecryptAndUnTarStatus extends TaskStatus {
  decryptAndUnTarOptions?: DecryptAndUnTarOptions
}
export interface DecryptAndUnTarResult {
  exportDir: string;
  zipFiles: string[];
}
//
//
//
export interface FindFilesOptions {
  pattern?: RegExp;
  files?: string[];
  folders: string[];
}

