'use strict';
const path = require('path');
const fs = require('fs');
const moment = require('moment');
const execa = require('execa');
const glob = require('glob');
const utils = require('./scripts/utils');
const tools = require('./scripts/utils/tools');
const semver = require('semver');
const gitUtils = require('./scripts/utils/git-utils');
const metadataUtils = require('./scripts/csdr/metadata/metadata-utils');
const auditUtils = require('./scripts/csdr/audit/audit-utils');
const configUtils = require('./scripts/csdr/config/config-utils');
const initUtils = require('./scripts/csdr/init/init-utils');
const buildAppUtils = require('./scripts/utils/build/app/build-app-utils');
const buildPackageUtils = require('./scripts/utils/build/package/build-package-utils');
const injectionUtils = require('./scripts/utils/pre-build/injection/injection-utils');
const installUtils = require('./scripts/csdr/install/install-utils');
const notificationUtils = require('./scripts/utils/notification/notification-utils');
const translationUtils = require('./scripts/utils/pre-build/translations/translation-utils');
const preBuildUtils = require('./scripts/utils/pre-build/pre-build-utils');
const apiUtils = require('./scripts/utils/api-utils');
const versionUtils = require('./scripts/csdr/version/version-utils');
const publishUtils = require('./scripts/utils/publish/publish-utils');


// console.log(configUtils.packages.getPackages());
// console.log(configUtils.packages.getPackage('eui-tools'));

// console.log(configUtils.global.getConfigOptions());

// const pkg = csdrUtils.getPackage('opsys-level2-forecast-ui');
// const prevVersionTag = 'v2.2.0';
// const version = '2.2.1';
// const pkg = csdrUtils.getPackage('opsys-payment-forecast-ui');
// const prevVersionTag = 'v2.0.10';
// const version = '2.0.11';
// const pkg = csdrUtils.getPackage('opsys-demand-manager-ui');
// const prevVersionTag = 'v1.10.2';
// const version = '1.10.3';
// const pkg = csdrUtils.getPackage('opsys-dac-form-ui');
// const prevVersionTag = 'v2.8.0';
// const version = '2.9.0';
// const pkg = csdrUtils.getPackage('opsys-map-ui');
// const prevVersionTag = 'v1.4.2';
// const version = '1.4.3';
// const pkg = csdrUtils.getPackage('opsys-epc-esub-bo-ui');
// const prevVersionTag = 'v4.13.0';
// const version = '4.14.0';
// const pkg = csdrUtils.getPackage('opsys-epc-procedure-manager-ui');
// const prevVersionTag = 'v3.17.0';
// const version = '3.17.1';
// const pkg = csdrUtils.getPackage('opsys-oe-track3-ui');
// const prevVersionTag = 'v4.3.2';
// const version = '4.3.3';

// return Promise.resolve()
  // .then(() => {
  //   return auditUtils.audit()
  // })

  // re-generate package metadata history

  // .then(() => {
  //   return metadataUtils.commit.getMetadata(pkg, {fromTag: prevVersionTag});
  // })

  // .then((metadata) => {
  //   console.log(metadata);
  //   return metadataUtils.package.storeBuildMetadata(pkg, version, metadata);
  // })

  // .then(() => {
  //   return metadataUtils.package.storeVersionsMetadata(pkg, version);
  // })




  // .then(() => {
  //   const { project } = tools.getArgs();
  //   const prj = csdrUtils.getCsdrProject(project);
  //   console.log(prj);
  // })

  // .catch((e) => {
  //   console.log(e);
  // })

  // const fromVersion = '274.0.0';
  // const toVersion = '275.0.0';
  // const project = configUtils.projects.getCsdrProject('my-workplace');

  // Promise.resolve()
  //   .then(() => {
  //     // return metadataUtils.appHistory.generateDiffReport(project, fromVersion, false, 'INT');
  //     return metadataUtils.appHistory.generateDiffReport(project, fromVersion, false, 'PROD', fromVersion, toVersion);
  //   })
  //   .then((diffMetadata) => {
  //     console.log(diffMetadata);
  //     // return metadataUtils.appHistory.storeMetadata(project, diffMetadata, fromVersion, sprintLogicalVersion, 'INT');
  //   })
  //   .catch((e) => {
  //     console.log(e);
  //     process.exit(1);
  //   })

// const envTarget = 'TRN';

// return Promise.resolve()
//   .then(() => {
//     const project = configUtils.projects.getCsdrProject('my-workplace');
//     console.log(project);
//     return project;
//   })
//   .then((prj) => {
//     return compositeUtils.getDeps(prj, envTarget);
//   })

//   .then((compositeDeps) => {
//     console.log(compositeDeps);
//   })




// return Promise.resolve()
//   .then(() => {
//     return initUtils.meta.init();
//   })

// return Promise.resolve()
//   .then(() => {
//     return metadataUtils.stats.run();
//   })

// return Promise.resolve()
//   .then(() => {
//     const pkgName = 'eui';
//     const pkg = configUtils.packages.getPackage(pkgName, true);
//     const pkgSlackInfos = slackUtils.getPackageConfig(pkg);
//     const slackConfig = {
//       channel: pkgSlackInfos.SLACK_CHANNEL
//     }
//     tools.writeJsonFileSync(path.join(pkg.paths.pkgDirectory, 'slack-config.json'), slackConfig);
//   })





// return Promise.resolve()
//   .then(() => {
//     const metadataFile = path.join(process.cwd(), 'apps', 'my-workplace', 'src', 'assets', 'app-metadata.json');

//     return tools.writeJsonFileSync(metadataFile, {});
//   })


// return Promise.resolve()
//   .then(() => {
//     const prjName = 'eui-showcase-root';
//     const prj = configUtils.projects.getProject(prjName);

//     console.log(prj);

//     return slackUtils.writeSlackProjectConfig(prj);
//   })



// Promise.resolve()
// .then(() => {
//   const packages = configUtils.packages.getCsdrPackagesFull(false);
//   return metadataUtils.stats.getPackagesVersions(packages);
// })

// .then((output) => {
//   console.log(output);
// })

// const moment = require('moment');
// const dt = '20200510';
// console.log(moment(dt));

// const isBetween = moment(dt).isBetween(moment().subtract(7, "days"), moment());

// console.log(isBetween);


// const moduleBase = `
// import { NgModule } from '@angular/core';
// import { RouterModule, Routes } from '@angular/router';

// import { SharedModule } from '../../../shared/shared.module';

// import { ModuleComponent } from './module.component';
// import { OverviewComponent } from './overview/component';
// import { ApiComponent } from './api/component';

// @SAMPLES_IMPORTS@
// const COMPONENTS = [
//     ModuleComponent,

//     ApiComponent,
//     OverviewComponent,

//     // SAMPLES
// @SAMPLES@
// ];

// const routes: Routes = [
//     { path: '', component: ModuleComponent },
// ];

// @NgModule({
//     imports: [
//         SharedModule,
//         RouterModule.forChild(routes),
//     ],
//     declarations: [
//         ...COMPONENTS,
//     ],
// })
// export class Module {}
// `;

// const moduleBaseHtml = `
// <app-doc-page id="@CMP@">

//     <!-- OVERVIEW / GENERAL INFOS-->

//     <docPageOverview>
//         <overview></overview>
//     </docPageOverview>


//     <!-- API CONTENT / link to SCSS and styles vars + theming -->

//     <docPageApi>
//         <api></api>
//     </docPageApi>


//     <!-- SAMPLES CONTENT - sub options available -->

//     <docPageSamples>

//       @SAMPLES@

//     </docPageSamples>
// </app-doc-page>
// `;


// const sampleHtml = `
//       <app-doc-sample id="@SAMPLE_NORMAL@">
//         <@SAMPLE@></@SAMPLE@>
//       </app-doc-sample>
// `;



// return Promise.resolve()
//   .then(() => {
//     const fs = require('fs');

//     const cmp = 'ux-autocomplete-tag';

//     const cmpClass = tools.camelCaseString(cmp, '-', true)+'Component'

//     const rootPath = '/home/roelsgr/_DEV/csdr-eui-9/apps/eui-showcase-ux/src/app/features/01-style-guide/03-components/'
//     const cmpPath = path.join(rootPath, cmp);
//     const apiSourcePath = path.join('/home/roelsgr/_DEV/csdr-eui-9/apps/eui-showcase-ux/src/app/features/01-style-guide/03-components/', 'ux-a-date-tag', 'api');
//     const overviewSourcePath = path.join('/home/roelsgr/_DEV/csdr-eui-9/apps/eui-showcase-ux/src/app/features/01-style-guide/03-components/', 'ux-a-date-tag', 'overview');

//     // check if multi-folders
//     const folders = tools.getFolders(cmpPath);

//     let data, lines = [];

//     if (folders.length > 0) {
//       folders.forEach((folder) => {
//         data = fs.readFileSync(path.join(cmpPath, folder, folder + '.component.html'), 'UTF-8');
//         lines = [...lines, ...data.split(/\r?\n/)];
//       })

//     } else {
//       data = fs.readFileSync(path.join(cmpPath, cmp + '.component.html'), 'UTF-8');
//       lines = data.split(/\r?\n/);
//     }

//     if (!lines) return;


//     const filtered = [];
//     const sections = [];

//     let sectionStarted = false;
//     let currentSection;

//     lines.forEach((line) => {
//         if (!sectionStarted) {
//           if (line.indexOf('<app-section-code') > -1) {
//             sectionStarted = true;
//             const labelPosStart = line.indexOf('label="') + 7;
//             const labelPosEnd = labelPosStart + line.substr(labelPosStart).indexOf('"');
//             currentSection = line.substr(labelPosStart, labelPosEnd-labelPosStart);
//             sections.push(currentSection);

//           } else {
//             if (currentSection) filtered.push({ section: currentSection, line: line });
//           }

//         } else {
//           if (line.indexOf('</app-section-code') > -1) {
//             sectionStarted = false;
//           }
//         }
//     });

//     const cmpSamplesPath = path.join(cmpPath, 'samples');
//     tools.mkdir(cmpSamplesPath);


//     sections.forEach((section) => {
//       const sectionLines = filtered.filter(l => l.section === section).map(l => l.line);

//       const cmpSamplePath = path.join(cmpSamplesPath, section);
//       const cmpSampleTsPath = path.join(cmpSamplePath, 'component.ts');
//       tools.mkdir(cmpSamplePath);
//       tools.writeFileContent(path.join(cmpSamplePath, 'component.html'), sectionLines.join('\n'));

//       // replace component class
//       let cmpTsFileContent = tools.getFileContent(path.join(cmpPath, cmp + '.component.ts'));
//       cmpTsFileContent = cmpTsFileContent.replace(cmpClass, tools.camelCaseString(section, '-', true)+'Component');
//       cmpTsFileContent = cmpTsFileContent.replace(`${cmp}.component.html'`, `component.html', selector: '${tools.camelCaseString(section, '-')}',`);
//       tools.writeFileContent(cmpSampleTsPath, cmpTsFileContent);
//     })


//     // write module.html
//     let outModuleHtml = moduleBaseHtml.replace('@CMP@', cmp);
//     let outSamples = '';
//     sections.forEach((section) => {
//       let currentSample = tools.replaceAll(sampleHtml, '@SAMPLE@', tools.camelCaseString(section, '-')) + '\n';
//       currentSample = currentSample.replace('@SAMPLE_NORMAL@', section);
//       outSamples += currentSample;
//     })
//     outModuleHtml = outModuleHtml.replace('@SAMPLES@', outSamples);

//     outModuleHtml += `
//       { label: '${cmp}', url: 'components/${cmp}' },\n
//       { path: '${cmp}', loadChildren: './${cmp}/module#Module' },\n
//     `;
//     tools.writeFileContent(path.join(cmpPath, 'module.component.html'), outModuleHtml);

//     // write module.ts
//     let outSamplesImport = '';
//     let outSamplesComponents = '';
//     sections.forEach((section) => {
//       const cmpGenClass = tools.camelCaseString(section, '-', true)+'Component';
//       outSamplesImport += `import { ${cmpGenClass} } from './samples/${section}/component';` + '\n';
//       outSamplesComponents += '    ' + cmpGenClass + ',\n';
//     })
//     let outModule = moduleBase.replace('@SAMPLES_IMPORTS@', outSamplesImport).replace('@SAMPLES@', outSamplesComponents);
//     tools.writeFileContent(path.join(cmpPath, 'module.ts'), outModule);

//     // copy api and overview
//     tools.copydir(apiSourcePath, path.join(cmpPath, 'api'));
//     tools.copydir(overviewSourcePath, path.join(cmpPath, 'overview'));

//     // copy module.component.ts
//     let cmpTsFileContent = tools.getFileContent(path.join(cmpPath, cmp + '.component.ts'));
//     cmpTsFileContent = cmpTsFileContent.replace(cmpClass, 'ModuleComponent');
//     cmpTsFileContent = cmpTsFileContent.replace(`${cmp}.component.html`, `module.component.html`);
//     tools.writeFileContent(path.join(cmpPath, 'module.component.ts'), cmpTsFileContent);

//   })


// return Promise.resolve()
//   .then(() => {
//     const newVersion = semver.inc('9.0.0-rc.0', 'prerelease');
//     console.log(newVersion);
//   })


// return Promise.resolve()
//   .then(() => {
//     const prjName = 'eui-showcase-ux';
//     const prj = configUtils.projects.getProject(prjName);

//     console.log(prj);

//     return buildAppUtils.generateProjectDistributionFile(prj, true);
//   })


// return Promise.resolve()
//   .then(() => {
//     const version = '^2.0.0';
//     const pkg = configUtils.packages.getPackage('pmob-shared-ui', true);
//     console.log(pkg, version.substr(1).split('.')[0]);
//     const lastMajorVersion = metadataUtils.package.getLastMajorVersion(pkg, version.substr(1).split('.')[0]);

//     console.log(lastMajorVersion);
//   })


// return Promise.resolve()
//   .then(() => {
//     const pkgName = 'cc-task-manager-ui';
//     const pkg = configUtils.packages.getPackage(pkgName, true);

//     console.log(pkg);

//     return buildPackageUtils.checkDeps(pkg);
//   })

// return Promise.resolve()
//   .then(() => {
//     const pkgName = 'eui';
//     const pkg = configUtils.packages.getPackage(pkgName, true);

//     return slackUtils.sendPackageTextMessage(
//       pkg,
//       `TEST MESSAGE *${pkg.name}*`
//     );
//   })

// return Promise.resolve()
//   .then(() => {
//     return installUtils.remote.installDeps();
//   })

// return Promise.resolve()
//   .then(() => {
//     return installUtils.common.getLocalPackagesCompositeDepsRemapped();
//   })
//   .then((deps) => {
//     console.log(deps);
//   })

// return Promise.resolve()
//   .then(() => {
//     return mailUtils.send();
//   })


// return Promise.resolve()
//   .then(() => {
//     const pkgName = 'eui-tools';
//     const pkg = configUtils.packages.getPackage(pkgName, true);

//     const config = notificationUtils.getPackageConfig(pkg);
//     console.log(config);


//     // const prjName = 'my-workplace';
//     // const prj = configUtils.projects.getCsdrProject(prjName);

//     // const config = notificationUtils.getProjectConfig(prj);
//     // console.log(config);
//   })





// SIMULATE NEXT DELTA FOR AN ENV RELEASE

// const prjName = 'my-workplace';
// const prj = configUtils.projects.getCsdrProject(prjName);
// var currentDeps = {};
// const env = 'PROD';

// return Promise.resolve()
// .then(() => {
//   return metadataUtils.appEnvs.getMetadata(prj);
// })
// .then((envsMetadata) => {
//   currentDeps.packages = envsMetadata[env].dependencies;
//   return compositeUtils.getDeps(prj, env);
// })
// .then((newDeps) => {
//   const compositeDeps = {};
//   compositeDeps.packages = newDeps;
//   return metadataUtils.appHistory.getDiffBetweenBuildVersions(currentDeps, compositeDeps, true);
// })
// .then((diffMetadata) => {
//   return metadataUtils.appHistory.flattenDiffMetadata(diffMetadata);
// })
// .then((flatDiffMetadata) => {
//   flatDiffMetadata.forEach((m) => {
//     console.log(`${m.package} => ${m.fromVersion} ===> ${m.toVersion}`);
//   })
// })


// // SIMULATE COMPARISON BETWEEN 2 DEPS SETS
// const prjName = 'my-workplace';
// const prj = configUtils.projects.getCsdrProject(prjName);
// const env1 = 'TRN';
// const env2 = 'PROD';
// var env1Deps = {}, env2Deps = {};

// return Promise.resolve()
// .then(() => {
//   return metadataUtils.appEnvs.getMetadata(prj);
// })
// .then((envsMetadata) => {
//   env1Deps.packages = envsMetadata[env1].dependencies;
//   env2Deps.packages = envsMetadata[env2].dependencies;
//   return metadataUtils.appHistory.getDiffBetweenBuildVersions(env1Deps, env2Deps, true);
// })
// .then((diffMetadata) => {
//   return metadataUtils.appHistory.flattenDiffMetadata(diffMetadata);
// })
// .then((flatDiffMetadata) => {
//   flatDiffMetadata.forEach((m) => {
//     console.log(`${m.package} : ${env1}:${m.fromVersion} ------ ${env2}:${m.toVersion}`);
//   })
// })

// return Promise.resolve()
//   .then(() => {
//     const pkgName = 'mywp-core-ui';
//     const pkg = configUtils.packages.getPackage(pkgName, true);
//     configUtils.angular.generateTsConfigLibProd(pkg);
//   })
// return Promise.resolve()
//   .then(() => {
//     // const prjName = 'my-workplace';
//     // const prj = configUtils.projects.getCsdrProject(prjName);

//     // return installUtils.compositeUtils.getProjectFixedDeps(prj);
//     return installUtils.common.getLocalProjectsFixedDeps();
//   })
//   .then((deps) => {
//     console.log('fetched deps:', deps);
//   })





// return Promise.resolve()
//   .then(() => {
//     const pkgName = 'cc-task-centre-remote-el-ui';
//     const pkg = configUtils.packages.getPackage(pkgName, true);
//     console.log(pkg);

//     return metadataUtils.packageHistory.generateDiffReport(pkg);
//   })

//   .then((diffMetadata) => {
//     console.log(diffMetadata);
//   })
// return Promise.resolve()
//   .then(() => {
//     const input = {
//       "locked": true,
//       "updated": "2021-07-08T10:24:57+02:00"
//     };

//     const moment = require('moment');
//     const date1 = moment('2021-07-08T10:24:57+02:00');
//     // console.log(date1);
//     const date2 = moment();
//     // console.log(moment(date2).format());
//     const diff = date2.diff(date1, 'm');
//     // console.log(diff);

//     const configOptions = configUtils.global.getConfigOptions();
//     const pkgLockFile = path.join(configOptions.DEVOPS_METADATA_PATH, `_aaaa-lock.json`);

//     const lockContent = {
//       locked: true,
//       lockedDate: moment().format(),
//     }

//     tools.writeJsonFileSync(pkgLockFile, lockContent);

//     const lockContentFromFile =  tools.getJsonFileContent(pkgLockFile);

//     console.log(lockContentFromFile);

//     const lockedDate = moment(lockContentFromFile.lockedDate);
//     console.log(lockedDate.diff(date1, 'm'));

//   })


// return Promise.resolve()
//   .then(() => {
//     console.log('t1')
//     console.log(new Date());

//     return new Promise((resolve) => {
//       setTimeout(resolve, 8000);
//     });
//   })

//   .then(() => {
//     console.log('t2')
//     console.log(new Date());
//   })

//   .then(() => {
//     console.log('T3')
//   })

// return Promise.resolve()
//   .then(() => {
//     tools.logBigTitle('BIG TITLE');
//     tools.logTitle('TITLE');
//     tools.logInfo('test log info');
//     tools.logInfo('test log info');
//     tools.logInfo('test log info');
//     tools.logSuccess('test log success');
//     tools.logError('test log error');
//     tools.logWarning('test log warning');
//     tools.logAccent('test log accent');
//     tools.logBanner('this is the content of the banner');
//   })






// return Promise.resolve()
//   .then(() => {
//     const pkg =  configUtils.packages.getPackageByNpmPkg('@csdr/core', true);
//     console.log(pkg);
//     const versions = metadataUtils.package.getPackageVersions(pkg);

//     console.log(
//       versions.filter((v) => {
//         return v.version.split('.')[0] === '1'
//       }).splice(-1)[0]
//     );
//   })




// Promise.resolve()
//   .then(() => {
//     return apiUtils.login();
//   })
//   .then((response) => {
//     console.log(response);
//   })
//   .then(() => {
//     return apiUtils.getDevopsMetadata();
//   })
//   .then((response) => {
//     console.log(response);
//   })
//   .catch((e) => {
//     console.log(e);
//   })


// A LA CARTE REMOTE TESTING

// const pkg = configUtils.packages.getPackage('mywp-dummy-eui10-remote-el-ui');

// Promise.resolve()
//   .then(() => {
//     return versionUtils.packageRemote.getNewVersion(pkg, 'PROD');
//   })
//   .then((version) => {
//     console.log(version);
//   })

// Promise.resolve()
//   .then(() => {
//     return metadataUtils.packageEnvs.getMetadata(pkg);
//   })
//   .then((envsMetadata) => {
//     return installUtils.compositeCore.getCompositeDeps(
//       pkg.paths.pkgFromRoot,
//       'TST',
//       'DEFAULT',
//       false,
//       envsMetadata
//     )
//   })
//   .then((deps) => {
//     console.log(deps);
//   })




// METADATA API TESTING
// --------------------
// const metadataModule = require('./scripts/csdr/metadata/v2');
// const pkg = configUtils.packages.getPackage('cc-task-details-eui10-remote-el-ui');

// Promise.resolve()
//   .then(() => {
//     return metadataModule.package.getMetadata(pkg);
//   })
//   .then((metadata) => {
//     console.log(metadata);
//   })
//   .then(() => {
//     return metadataModule.global.getMetadata();
//   })
//   .then((metadata) => {
//     console.log(metadata);
//   })
//   .catch((e) => {
//     console.log(e);
//   })





// const pkg = configUtils.packages.getPackage('mywp-dummy-eui10-remote-el-ui');

// Promise.resolve()
//   .then(() => {
//     return metadataUtils.packageHistory.generateDiffReport(pkg);
//   })
//   .then((metadata) => {
//     console.log(metadata);
//   })

// Promise.resolve()
// // getting root composite - dependencies-composite.json content
// .then(() => {
//   const compositeJsonFile = path.join(process.cwd(), 'apps/eui-showcase-dev-guide', 'dependencies-composite.json');
//   var compositeDeps = tools.getJsonFileContent(compositeJsonFile) || {};

//   if (compositeDeps.dependencies) {
//     return compositeDeps.dependencies;
//   } else {
//     return compositeDeps;
//   }
// })
// .then((deps) => {
//   console.log(deps);
// })


// METADATA ESTING
// --------------------
// const pkg = configUtils.packages.getPackage('cc-task-details-eui10-remote-el-ui');
// const envTarget = 'INT';

// let versionsMetadata, envsMetadata;

// Promise.resolve()
  // .then(() => {
  //   return installUtils.remotes.getDeps(pkg, envTarget, 'regio');
  // })
  // .then((deps) => {
  //   console.log(deps);
  // })
  // .then(() => {
  //   // return versionUtils.packageRemote.getNewVersion(pkg, envTarget);
  //   return metadataUtils.packageHistory.generateDiffReport(pkg, envTarget);
  // })







// PROJECT VERSION CSDR BUILD TESTING (à la carte way === MWP / PMO MOBILE / SEDIA)
// --------------------------------------------------------------------------------
// const project = configUtils.projects.getProject('pmo-mobile');

// let versionsMetadata;
// let envsMetadata;

// return Promise.resolve()
  // .then(() => {
  //   return metadataUtils.appVersions.getMetadata(project);
  // })
  // .then((metadata) => {
  //   versionsMetadata = metadata;
  // })
  // .then(() => {
  //   return metadataUtils.appEnvs.getMetadata(project);
  // })
  // .then((metadata) => {
  //   envsMetadata = metadata;
  // })
  // .then(() => {
  //   return versionUtils.common.getNewVersionDTAP('DEV', versionsMetadata, envsMetadata);
  // })
  // .then(() => {
  //   return versionUtils.appEnvTarget.getNewVersion(project, 'DEV');
  // })
  // .then((version) => {
  //   console.log(version);
  // })

// return Promise.resolve()
//   .then(() => {
//     const project = configUtils.projects.getProject('eui-sample');
//     return preBuildUtils.projects.processSvgAssets(project);
//   })


// const lunr = require('lunr');

// Promise.resolve()
// .then(() => {
//   const rootPath = path.join(process.cwd(), 'apps', 'eui-showcase-ux-components', 'src', 'assets', 'samples');

//   let documents = [];

//   const sampleTypes = tools.getFolders(rootPath);
//   sampleTypes.forEach((sampleType) => {
//     const sampleSubTypes = tools.getFolders(path.join(rootPath, sampleType));
//     sampleSubTypes.forEach((sampleSubType) => {
//       const components = tools.getFolders(path.join(rootPath, sampleType, sampleSubType));
//       components.forEach((cmp) => {
//         const samples = tools.getFolders(path.join(rootPath, sampleType, sampleSubType, cmp, 'samples'));
//         samples.forEach((sample) => {
//           const metadata = {
//             "name": `${sampleType}/${sampleSubType}/${cmp}#${sample}`,
//             "fileContent":  tools.getFileContent(path.join(rootPath, sampleType, sampleSubType, cmp, 'samples', sample, 'component.html')),
//           }
//           documents.push(metadata);
//         })
//       });
//     })
//   })

//   var idx = lunr(function () {
//     this.ref('name')
//     this.field('fileContent')

//     documents.forEach(function (doc) {
//       this.add(doc)
//     }, this)
//   })

//   tools.writeFileContent(path.join(process.cwd(),'full-index.txt'), JSON.stringify(idx));

//   console.log(idx.search('test'));
// })


// const pkg = configUtils.packages.getPackage('cc-task-centre-eui14-remote-el-ui', true);

// const version = configUtils.packages.getRemoteEuiVersion(pkg);
// const versionNumber = version.split('.')[0];
// console.log(versionNumber);


// return Promise.resolve()
//   .then(() => {
//     const prj = configUtils.projects.getProject('my-workplace-host-playground');
//     return installUtils.projects.getDeps(prj);
//   })
//   .then((deps) => {
//     console.log(deps);
//   })


// const prjName = 'sfc-fo';
// const prj = configUtils.projects.getCsdrProject(prjName);

// return Promise.resolve()
//   .then(() => {
//     return metadataUtils.appEnvs.getMetadata(prj);
//   })
//   .then((envsMetadata) => {
//     console.log(envsMetadata);

//     return installUtils.projects.getDeps(prj);
//   })
//   .then((deps) => {
//     console.log(deps);
//   })


// const migrateConfig = () => {
//   const config = configUtils.global.getCsdrConfig(true);

//   const prjCount = Object.keys(config.projects);
//   console.log('projects : ' + prjCount.length);
//   const pkgCount = Object.keys(config.packages);
//   console.log('packages : ' + pkgCount.length);
// }

// migrateConfig();



// const pkg = configUtils.packages.getPackage('ppxms-core-ui', true);

// Promise.resolve()
//   .then(() => {
//     return metadataUtils.package.getPackageVersionsByMajor(pkg, '1')
//   })
//   .then((versions) => {
//     console.log(versions);
//     console.log(versions.splice(-1)[0].version);
//   })

// return Promise.resolve()
//   .then(() => {
//     const a = configUtils.packages.getCsdrRemotePackages(10, 'sedia')
//                 .map((p) => {
//                   return { name: p.name, npmPkg: p.npmPkg }
//                 });
//     console.log(tools.sortArray(a, 'name'));
//   })






// STYLES AUDIT TESTS

// Promise.resolve()
//   .then(() => {
//     const { pkg } = tools.getArgs();
//     const p = configUtils.packages.getPackage(pkg, true);
//     return auditUtils.styles.audit(p);
//   })

// const installPackages = async packages => {
//   const promises = packages.map(async p => {
//     const pkg = configUtils.packages.getPackageByNpmPkg(p.npmPkg, true);
//     await gitUtils.cloneRepo(pkg.repository, pkg.paths.root, false, true);
//   })

//   await Promise.all(promises);
// }


// Promise.resolve()
//   .then(() => {
//     return metadataUtils.common.getDevopsMetadata();
//   })
//   .then((metadata) => {
//     let packages = metadata.packages.filter((p) => {
//       return moment(p.date, 'YYYYMMDD-H24:mm') > moment().subtract(12, 'months');
//     }).filter((p) => {
//       return p.name.indexOf('ui') > -1 &&
//              p.name.indexOf('remote') === -1 && p.npmPkg !== undefined &&
//              p.name.indexOf('sfc') === -1 && p.name.indexOf('sedia') === -1;
//     })

//     console.log(packages);
//     console.log(packages.length);

//     packages = packages.filter((p) => {
//       return !tools.isDirExists(path.join(process.cwd(), 'packages', p.name));
//     })

//     console.log(packages.length);

//     // installPackages(packages);
//   })

// Promise.resolve()
//   .then(() => {
//     let folders = tools.getFolders(path.join(process.cwd(), 'packages'));
//     folders = folders.filter((f) => {
//       const scopes = ['cc','csdr','eac','opsys','mywp','sygma','redress','ppams','ppxms','urf'];
//       return scopes.some((s) => {
//         return f.includes(s);
//       })
//     })
//     .filter((f) => {
//       return tools.isFileExists(path.join(process.cwd(), 'packages', f, 'dependencies-composite.json'));
//     })

//     const JSONResult = [];
//     folders.forEach((f) => {
//       const pkg = configUtils.packages.getPackage(f, true);
//       const report = auditUtils.styles.runStylesAudit(pkg);
//       JSONResult.push(report);
//     })

//     const sumarryResult = JSONResult.map((p) => {
//       return {
//         package: p.package,
//         score: p.score,
//         total: p.total,
//         pcScore: p.pcScore
//       }
//     })

//     const finalResult = {
//       summary: tools.sortArray(sumarryResult, 'pcScore', 'desc'),
//       details: JSONResult
//     }

//     tools.writeJsonFileSync(path.join(process.cwd(), 'audit-styles.json'), finalResult);
//     tools.writeJsonFileSync(path.join(process.cwd(), 'audit-styles-summary.json'), sumarryResult);


//     // folders.forEach((f) => {
//     //   try {
//     //     const pPath = path.join(process.cwd(), 'packages', f);
//     //     console.log(pPath);

//     //     execa.shellSync(`git pull`, { cwd: pPath, stdio: 'inherit' });
//     //     execa.shellSync(`git checkout next/eui10`, { cwd: pPath, stdio: 'inherit' });
//     //   } catch(e) {
//     //     console.log(e);
//     //   }
//     // })

//   })

// Promise.resolve()
//   .then(() => {
//     const dev = tools.getJsonFileContent(path.join(process.cwd(), 'packages', 'mywp-routes-config', 'assets', 'route-defs.dev.json'));
//     const tst = tools.getJsonFileContent(path.join(process.cwd(), 'packages', 'mywp-routes-config', 'assets', 'route-defs.test.json'));

//     const devPaths = dev.map((p) => {
//       return p.path;
//     })
//     const tstPaths = tst.map((p) => {
//       return p.path;
//     })

//     console.log(devPaths);
//     console.log(tstPaths);


//     console.log(devPaths.filter(n => !tstPaths.includes(n)))
//     console.log(tstPaths.filter(n => !devPaths.includes(n)))
//   })


// Promise.resolve()
//   .then(() => {
//     const prjName = 'my-workplace-host';
//     const project = configUtils.projects.getCsdrProject(prjName);

//     return injectionUtils.routesReplacement.buildRoutes(project, 'TST', true);
//   })

// Promise.resolve()
//   .then(() => {
    // const prjName = 'my-workplace-host';
    // const prj = configUtils.projects.getCsdrProject(prjName);

    // return installUtils.projects.getLocalProjectFixedDeps(prj);

    // const pkg = configUtils.packages.getPackageByNpmPkg('@ecs/global', true);
    // if (pkg.child) {
    //   pkgName = pkg.parentPkg;
    //   console.log(pkgName);
    // }
    // console.log(pkg);

  //   const f = {
  //     name: 'sedia-ecs-eui10-remote-el-ui',
  //     version: '1.1.0',
  //     date: '20230111-11:43',
  //     npmPkg: '@sedia/ecs-eui10-remote-el',
  //     duration: 463832,
  //     envTarget: 'TST',
  //     dependencies: {
  //       '@eui/deps-base': '10.6.14',
  //       '@csdr/core': '2.3.13',
  //       '@csdr/integration': '2.0.46',
  //       '@ecs/global': '4.0.3',
  //       '@ecs/person-data': '4.0.3'
  //     }
  //   };
  //   const t = {
  //     name: 'sedia-ecs-eui10-remote-el-ui',
  //     version: '1.5.0',
  //     date: '20230202-09:41',
  //     npmPkg: '@sedia/ecs-eui10-remote-el',
  //     duration: 356556,
  //     envTarget: 'TST',
  //     dependencies: {
  //       '@eui/deps-base': '10.6.16',
  //       '@csdr/core': '2.3.13',
  //       '@csdr/integration': '2.0.46',
  //       '@ecs/global': '4.0.4',
  //       '@ecs/person-data': '4.0.4'
  //     }
  //   };
  //   return metadataUtils.packageHistory.getDiffBetweenBuildVersions(null, f, t);
  // })

  // .then((diffMetadata) => {
  //   console.log(diffMetadata);

  //   return metadataUtils.packageHistory.flattenDiffMetadata(diffMetadata);
  // })

  // .then((flatDiffMetadata) => {
  //   console.log(flatDiffMetadata);
  // })


// Promise.resolve()
//   .then(() => {
//     return auditUtils.yarn.audit(null);
//   })
//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
  //     const prjName = 'my-workplace-host';
  //     const project = configUtils.projects.getCsdrProject(prjName);
  //     // console.log(project);
  //     return preBuildUtils.projects.processCustomEnvScriptInjection(project, "dev");
  //   })
  //   .catch((e) => {
    //     console.log(e);
    //   })

// Promise.resolve()
//   .then(() => {
//     const pkg = configUtils.packages.getPackageByNpmPkg('@eui/deps-base', true);
//     console.log(pkg);
//     const pkgVersionMetadata = metadataUtils.package.getVersionMetadata(pkg, '13.1.21');
//     console.log(pkgVersionMetadata);
//   })
//   .catch((e) => {
//     console.log(e);
//   })


// Promise.resolve()
//   .then(() => {
//     const prj = configUtils.projects.getCsdrProject('my-workplace-host-playground');
//     return installUtils.projects.getLocalProjectRemoteDeps(prj);
//   })
//   .then((deps) => {
//     console.log(deps);
//   })


// Promise.resolve()
//   .then(() => {
//     const remote = configUtils.remotes.getRemote('cc-task-centre-eui15-remote-el-ui');
//     return buildPackageUtils.element.postBuild(remote, '1.0.0');
//   })
//   .then(() => {
//     console.log('ok');
//   })
// Promise.resolve()
//   .then(() => {
//     const pkg = configUtils.packages.getPackage('mywp-eusearch-eui10-remote-el-ui');
//     const euiVersion = configUtils.packages.getPackageEuiVersion(pkg, true);
//     console.log(euiVersion);
//   })
// Promise.resolve()
//   .then(() => {
//     // const packages = configUtils.packages.getCsdrPackages();
//     // console.log(packages);
//     const remotes = configUtils.remotes.getCsdrRemotes();
//     console.log(remotes);
//   })

// const prj = configUtils.projects.getCsdrProject('my-workplace-host-playground');


// Promise.resolve()
//   .then(() => {
//     return installUtils.projects.getLocalProjectRemoteDeps(prj);
//   })
//   .then((deps) => {
//     return installUtils.projects.importLocalProjectRemotes(prj, deps);
//   })
//   .then(() => {
//   })


// const teamsUtils = require('./scripts/utils/notification/teams-utils');

// Promise.resolve()
//   .then(() => {
//     console.log(teamsUtils.getChannelHook('pipeline-ui-edui'));
//   })

// Promise.resolve()
//   .then(() => {

//     var startTime = moment('03-01-2021 01:01:01', 'DD-MM-YYYY hh:mm:ss');
//     var endTime = moment('03-01-2021 01:04:53', 'DD-MM-YYYY hh:mm:ss');

//     var secondsDiff = endTime.diff(startTime, 's');

//     const getMinSec = (s) => { return(s-(s%=60))/60+'m'+(9<s?':':':0')+s+'s'; }
//     const minSec = getMinSec(secondsDiff);
//     console.log(minSec);
//   })

// Promise.resolve()
//   .then(() => {
//     const options = configUtils.global.getConfigOptions();
//     console.log(options);

//     const pkg = configUtils.packages.getPackage('mapar-administration-ui');
//     const config = notificationUtils.config.getPackageConfig(pkg);

//     console.log(config);
//   })

// Promise.resolve()
//   .then(() => {
//     const prjName = 'my-workplace-host-playground';
//     const project = configUtils.projects.getCsdrProject(prjName);
//     return preBuildUtils.projects.preBuild(project, 'TST', true, 'cdn-tst');
//   })
//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const pkgName = 'mapar-administration-eui15-remote-el-ui';
//     const remote = configUtils.remotes.getRemote(pkgName);

//     console.log(remote);
//   })
//   .catch((e) => {
//     console.log(e);
//   })

// const fromVersion = '4.0.0-ACC.0';
// const toVersion = '4.0.0-ACC.1';
// const pkg = configUtils.remotes.getRemote('cc-pmm-participants-eui15-remote-el-ui');

// Promise.resolve()
//   .then(() => {
//     return metadataUtils.packageHistory.generateDiffReport(pkg, 'ACC', fromVersion, toVersion);
//   })
//   .then((diffMetadata) => {
//     console.log(diffMetadata);
//   })
//   .catch((e) => {
//     console.log(e);
//     process.exit(1);
//   })
// Promise.resolve()
//   .then(() => {
//     const scopes = configUtils.packages.getPackageScopes();
//     console.log(scopes);
//   })
//   .catch((e) => {
//     console.log(e);
//   })
// Promise.resolve()
//   .then(() => {
//     // old package without gates forced
//     const pkg = configUtils.packages.getPackage('cc-flex-ui', true);
//     console.log(pkg);

//     return auditUtils.styles.audit(pkg);
//   })
//   .then((report) => {
//     console.log(report);
//   })

//   .catch((e) => {
//     console.log(e);
//   })

// route replacement test


// // BUILD PACKAGE FIRST !!

// const pkg = configUtils.packages.getPackage('eui');
// const pkgChild = configUtils.packages.getPackage('eui-base');
// const version = '15.4.1';

// Promise.resolve()
//   .then(() => {
//     return versionUtils.package.updateVersion(pkg,version);
//   })
//   .then(() => {
//     return buildPackageUtils.postBuild(pkg);
//   })
//   .then(() => {
//     // IF individual child packages have to be published individually

//     // console.log(pkgChild);
//     // const publishNpmCore = require('./scripts/utils/publish/npm');
//     // return publishNpmCore.publishCore(pkgChild, 'https://registry.npmjs.org', true)
//     return publishUtils.publish(pkg);
//   })
//   .then((report) => {
//     console.log(report);
//   })

//   .catch((e) => {
//     console.log(e);
//   })


// Promise.resolve()
//   .then(() => {
//     const prjName = 'my-workplace-host-playground-custom';
//     const project = configUtils.projects.getCsdrProject(prjName);
//     const envTarget = 'cdn-dev-local';

//     return preBuildUtils.routesReplacement.buildRoutes(project, envTarget);
//   })

//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const pkgs = configUtils.packages.getPackages();
//     console.log(pkgs);
//   })

//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const pkg = configUtils.remotes.getRemote('cc-task-details-eui15-remote-el-ui', true);
//     console.log(pkg);

//     const deps = installUtils.remotes.getDeps(pkg, 'TST');
//     console.log(deps);

//   })

//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const util = require('./scripts/csdr/release/package/common');
//     const branches = util.getBranches();
//     console.log(branches);
//   })
//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const prj = configUtils.projects.getCsdrProject('my-workplace-host');
//     const envTarget = 'INT';
//     return installUtils.projects.getDeps(prj, envTarget);
//   })

//   .then((compositeDeps) => {
//     console.log(compositeDeps);
//   })

// const prj = configUtils.projects.getCsdrProject('eui-showcase-ux-components');

// Promise.resolve()
//   .then(() => {
//     return utils.buildApp.generateProjectDistributionList(prj, true);
//   })

//   .then((output) => {
//     console.log(output);

//     const { baseHrefIn } = tools.getArgs();
//     const baseHref = configUtils.projects.getBaseHref(prj, '17.0.2-snapshot-1701859601406', baseHrefIn);

//     console.log(baseHref);
//   })


// Promise.resolve()
//   .then(() => {
//     const pkgsIn = configUtils.packages.getCsdrPackages();
//     let pkgs = Object.keys(pkgsIn).map(p => {
//       return {
//         name: p,
//         npmPkg: pkgsIn[p].npmPkg,
//         remote: pkgsIn[p].remote
//       }
//     });
//     pkgs = pkgs.filter(p => p.npmPkg !== undefined && !p.remote && p.name.indexOf('backend') === -1);
//     pkgs = tools.sortArray(pkgs, 'name');

//     pkgs.forEach(p => {
//       const pkg = configUtils.packages.getPackage(p.name, true);

//       const lastMetadataLatest = metadataUtils.package.getPackageVersionsLastLatest(pkg);
//       const lastMetadataSnapshot = metadataUtils.package.getPackageVersionsLastSnapshot(pkg);
//       const lastMetadataRc = metadataUtils.package.getPackageVersionsLastRc(pkg);

//       console.log(`Checking ${pkg.name}...`);

//       // TODO check multi-version of LATEST f.e. : csdr-integration-ui 2.x 3.x 4.x

//       try {
//         const output = execa.sync('npm', ['view', '--latest', pkg.npmPkg, '--json']).stdout;
//         const json = JSON.parse(output);
//         const npmSnapshot = json['dist-tags'].snapshot;
//         const npmLatest = json['dist-tags'].latest;
//         const npmNext = json['dist-tags'].next;

//         if (
//           lastMetadataSnapshot !== npmSnapshot ||
//           lastMetadataLatest !== npmLatest
//         ) {
//           console.log(pkg.name);
//           console.log(lastMetadataSnapshot, lastMetadataLatest, lastMetadataRc);
//           console.log(npmSnapshot, npmLatest, npmNext);
//           console.log ('');
//         }
//       } catch(e) {
//         console.log('---Error getting npm info for pkg');
//       }

//     });
//   })


// Promise.resolve()
//   .then(() => {
//     const pkg = configUtils.packages.getPackage('cc-decidepoc-ui', true);
//     console.log(pkg);
//     const versions = metadataUtils.package.getPackageVersions(pkg);
//     console.log(JSON.stringify(versions, null, 2));
//   })
//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const remote = configUtils.remotes.getRemote('cc-pmm-participants-eui15-remote-el-ui');
//     const npmInfos = metadataUtils.packageHistory.getPackageNpmInfos(remote);
//     console.log(npmInfos);
//     // return metadataUtils.packageHistory.generateDiffReport(remote, 'TST');
//   })
//   // .then((output) => { console.log(output)})
//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const pkg = configUtils.packages.getPackage('mywp-shell-ui');
//     const fromTag = 'v3.3.2';
//     const toTag = 'v3.3.4';
//     return metadataUtils.commit.getMetadata(pkg, {fromTag, toTag});
//   })
//   .then((output) => {
//     console.log(output);
//   })

// Promise.resolve()
//   .then(() => {
//     const dPath = path.join(process.cwd(), 'packages', 'devops-metadata');
//     let files = tools.getFiles(dPath);
//     files = files.filter(f => f.indexOf('-ui-history-metadata.json') > -1);
//     console.log(files.length);
//     files.forEach(f => {
//       console.log(f);
//       tools.remove(path.join(dPath, f));
//     });
//   })

// Promise.resolve()
//   .then(() => {
//     const remote = configUtils.remotes.getRemote('cc-pmm-participants-eui15-remote-el-ui');
//     return metadataUtils.remoteHistory.generateDiffReport(remote, 'TST');
//   })
//   .then((output) => { console.log(output)})
//   .catch((e) => {
//     console.log(e);
//   })


// Promise.resolve()
//   .then(() => {
//     const remote = configUtils.remotes.getRemote('cc-pmm-participants-eui15-remote-el-ui');
//     return metadataUtils.remoteHistory.generateDiffCommitsMetadataReport(remote, 'TRN');
//   })

//   .then((finalOutput) => {
//     console.log(finalOutput);
//   })

//   .catch((e) => {
//     console.log(e);
//   })

// Promise.resolve()
//   .then(() => {
//     const config = configUtils.global.getConfig();
//     console.log(config);

//     const isSonarEnabled = metadataUtils.common.isSonarEnabled();
//     console.log(isSonarEnabled);
//   })

// Promise.resolve()
//   .then(() => {
//     const pkg = configUtils.packages.getPackage('eui-mobile-core', true);
//     console.log(pkg);

//     const pkgVersions = metadataUtils.packageUtils.getPackageVersions(pkg);
//     console.log(pkgVersions);

//     const versions = metadataUtils.packageUtils.getLastMajorVersion(pkg, '17', false, true);
//     console.log(versions);
//   })


Promise.resolve()
  .then(() => {
    const prj = configUtils.projects.getCsdrProject('my-workplace-host');
    const envTarget = 'ACC';
    return installUtils.projects.getDeps(prj, envTarget);
  })

  .then((compositeDeps) => {
    console.log(compositeDeps);
  })