text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  const schematics_1 = require("@angular-devkit/schematics");
  const project_1 = require("@schematics/angular/utility/project");
  const validation_1 = require("../../utility/validation");
  const dependencies_1 = require("../../utility/dependencies");
  const logging_1 = require("../../utility/logging");
  const chalk_1 = require("chalk");
  const util_1 = require("../../utility/util");
  const files_1 = require("../../utility/files");
  /**
   * Haupt-Rule für diesen Schematic-Generator.
   * @param options
   */
  exports.luxVersion = (options) => {
      return schematics_1.chain([
          setupProject(options),
          checkVersions(),
          updateTheming(options),
          updatePackageJson(),
          todosForUser()
      ]);
  };
  /**
   * Prüft, ob die Property "project" gesetzt ist und
   * erstellt wenn nötig einen Standard-Pfad zum Projekt, wenn keiner bekannt ist.
   * @param options
   */
  function setupProject(options) {
      return (tree, context) => {
          logging_1.logNewUpdate('1.8.3');
          logging_1.logInfoWithDescriptor('Starte Konfiguration der Schematic.');
          return util_1.waitForTreeCallback(tree, () => {
              if (!options.project) {
                  throw logging_1.formattedSchematicsException('Option "project" wird benötigt.');
              }
              const project = project_1.getProject(tree, options.project);
              if (options.path === undefined) {
                  options.path = project.root;
              }
              util_1.checkSmoketestScriptExists(tree, context);
              logging_1.logSuccess(`Schematic-Konfiguration für Projekt "${options.project}" erfolgreich.`);
              return tree;
          });
      };
  }
  exports.setupProject = setupProject;
  /**
   * Prüft ob die Versionen des Projekts mit den erforderlichen Versionen dieses Updates übereinstimmen.
   */
  function checkVersions() {
      return (tree, context) => {
          logging_1.logInfoWithDescriptor('Starte die Versionsprüfung.');
          return util_1.waitForTreeCallback(tree, () => {
              const minimumLuxComponentsVersion = '1.8.2';
              validation_1.validateLuxComponentsVersion(tree, context, minimumLuxComponentsVersion);
              const minimumNodeVersion = '10.0.0';
              validation_1.validateNodeVersion(context, minimumNodeVersion);
              logging_1.logSuccess(`Versionen erfolgreich geprüft.`);
              return tree;
          });
      };
  }
  exports.checkVersions = checkVersions;
  function updateTheming(options) {
      return files_1.moveFilesToDirectory(options, 'files/theming', 'src/theming');
  }
  exports.updateTheming = updateTheming;
  /**
   * Aktualisiert die package.json des Projekts.
   */
  function updatePackageJson() {
      return (tree, context) => {
          logging_1.logInfoWithDescriptor('Aktualisiere LUX-Components Version auf 1.8.3.');
          return util_1.waitForTreeCallback(tree, () => {
              const newDependency = [
                  { type: dependencies_1.NodeDependencyType.Default, version: '1.8.3', name: 'lux-components' },
                  { type: dependencies_1.NodeDependencyType.Default, version: '6.0.2', name: 'ng2-pdf-viewer' }
              ];
              newDependency.forEach(dependency => {
                  dependencies_1.updatePackageJsonDependency(tree, context, dependency);
              });
              logging_1.logSuccess(`package.json erfolgreich aktualisiert.`);
              return tree;
          });
      };
  }
  exports.updatePackageJson = updatePackageJson;
  /**
   * Gibt die offen stehenden ToDos (Aufgaben, die der Generator nicht übernehmen konnte) für den User aus.
   */
  function todosForUser() {
      return (tree, context) => {
          util_1.runInstallAndLogToDos(context, `Bitte starten Sie ${chalk_1.default.redBright('npm run smoketest')} um möglichen Fehlern vorzugreifen.`, `Weitere Informationen: https://confluence.gfi.ihk.de/display/AF/Update+Guide#UpdateGuide-UmstellungaufVersion1.8.3`);
          return tree;
      };
  }
  exports.todosForUser = todosForUser;
  //# sourceMappingURL=index.js.map