#!/usr/bin/env node
import 'reflect-metadata';
import kernel from '../../inversify.config';
import {VitaTasks} from '../../interfaces/vita-tasks';
import {VitaFileUtil} from "../../interfaces/vita-file-util";
import {
  ParallelMergePcapFilesResult, MergePcapFilesResult,
  DecryptAndUnTarResult, UnZipFileResult, ProcessFullPipelineResult, FullPipeline, ProcessFullPipelineStatus
} from "../../interfaces/vita-options-results";
import {VitaPcapMerge} from "../../interfaces/vita-pcap-merge";
import {VitaDecryptUnTar} from "../../interfaces/vita-decrypt-untar";
import {CommandUtil, IPostal} from "firmament-yargs";
import {EtlFlow} from "etl-typings";
const path = require('path');
const fullPipeline = kernel.get<FullPipeline>('FullPipeline');
const vitaFileUtil = kernel.get<VitaFileUtil>('VitaFileUtil');
const vitaTasks = kernel.get<VitaTasks>('VitaTasks');
const vitaDecryptUnTar = kernel.get<VitaDecryptUnTar>('VitaDecryptUnTar');
const vitaPcapMerge = kernel.get<VitaPcapMerge>('VitaPcapMerge');
const commandUtil = kernel.get<CommandUtil>('CommandUtil');
const postal = kernel.get<IPostal>('IPostal');

process.on('uncaughtException', err => {
  console.log(err);
});

fullPipeline.decryptAndUnTarOptions.encryptedFiles.push('/home/jreeme/pcaps/pcaps-encrypted/good.tar.enc');
//fullPipeline.decryptAndUnTarOptions.targetFolder = '/tmp/flibber';
fullPipeline.mergePcapFilesOptions.mergedPcapFile = 'zagabondBliff.pcap';

fullPipeline.fromJsonFile('/home/jreeme/src/firmament-vita/ts/test/test-data/testFullPath00');

/*fullPipeline.tag = <EtlFlow>{
  id: 'loopbackId',
  aminoId: 'aminoId',
  name: 'Bro',
  parentAminoId: 'parentFileAminoId',
  steps: [
    {
      id: 'loopbackId',
      aminoId: 'aminoId',
      name: 'DecryptAndUnTar',
      parentAminoId: 'parentAminoId'
    },
    {
      id: 'loopbackId',
      aminoId: 'aminoId',
      name: 'UnZip',
      parentAminoId: 'parentAminoId'
    },
    {
      id: 'loopbackId',
      aminoId: 'aminoId',
      name: 'MergePCap',
      parentAminoId: 'parentAminoId'
    }
  ]
};*/

postal.publish({
  channel: 'CommandUtil',
  topic: 'SuppressConsoleOutput',
  data: {
    suppressConsoleOutput: false
  }
});

let topic = 'badfood';
postal.subscribe({
  channel: 'FirmamentVita',
  topic,
  callback: (data) => {
    console.dir(data);
  }
});

vitaTasks.processFullPipelineInstance(fullPipeline,
  (err: Error, status: ProcessFullPipelineStatus) => {
    postal.publish({
      channel: 'FirmamentVita',
      topic,
      data: {
        type: 'status',
        payload: status
      }
    });
  },
  (err: Error, result: ProcessFullPipelineResult) => {
    postal.publish({
      channel: 'FirmamentVita',
      topic,
      data: {
        type: 'result',
        payload: result
      }
    });
    commandUtil.processExitWithError(err, 'Finished.');
  });

//'/share/nas4/user/brichardson/VITA/smarthome/data/2016'
//const startDir = '/tmp/pcaps';
/*

 const startDir = '/home/jreeme/pcaps/out';
 vitaFileUtil.findFiles({
 pattern: /\.pcap$/,
 folders: [startDir]
 }, (err: Error, files: string[]) => {
 files.sort();
 vitaPcapMerge.mergePcapFiles(files,
 path.resolve(startDir, 'mergedPcap.pcap'),
 (err: Error, results: MergePcapFilesResult) => {
 process.exit(0);
 })
 });
 */

/*vitaFileUtil.findFiles({
 pattern: /\.gz$/,
 folders: ['/tmp/pcaps-out']
 }, (err: Error, files: string[]) => {
 vitaFileUtil.unZipFiles({
 //zippedFiles: files,
 deleteOriginalZipFile: true
 , foldersOfZippedFiles: ['/home/jreeme/pcaps/out']
 }, (err: Error, results: UnZipFileResult[]) => {
 console.dir(results);
 process.exit(0);
 })
 });*/

/*
 vitaFileUtil.findFiles({
 pattern: /\.enc$/,
 folders: ['/home/jreeme/pcaps/pcaps-encrypted']
 }, (err, files) => {
 let encryptedFolders = [
 '/home/jreeme/pcaps/pcaps-encrypted-folders/folder1',
 '/home/jreeme/pcaps/pcaps-encrypted-folders/folder2',
 '/home/jreeme/pcaps/pcaps-encrypted-folders/folder3'
 ];
 vitaDecryptUnTar.process({
 encryptedFiles: files,
 targetFolder: '/home/jreeme/pcaps/out',
 foldersOfEncryptedFiles: encryptedFolders,
 encryptedFilePattern: /\.enc$/
 },
 (err: Error, decryptAndUnTarResult: DecryptAndUnTarResult[]) => {
 console.dir(decryptAndUnTarResult);
 process.exit(0);
 decryptAndUnTarResult.forEach(result => {
 vitaFileUtil.unZipFiles(result.zipFiles, (err: Error, unZipFileResult: UnZipFileResult[]) => {
 process.exit(0);
 })
 });
 });
 });
 */

