"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CleanCommand = void 0;
const yok_1 = require("../common/yok");
const constants = require("../constants");
class CleanCommand {
    constructor($projectCleanupService, $projectConfigService, $terminalSpinnerService) {
        this.$projectCleanupService = $projectCleanupService;
        this.$projectConfigService = $projectConfigService;
        this.$terminalSpinnerService = $terminalSpinnerService;
        this.allowedParameters = [];
    }
    execute(args) {
        return __awaiter(this, void 0, void 0, function* () {
            const spinner = this.$terminalSpinnerService.createSpinner();
            spinner.start("Cleaning project...\n");
            const pathsToClean = [
                constants.HOOKS_DIR_NAME,
                constants.PLATFORMS_DIR_NAME,
                constants.NODE_MODULES_FOLDER_NAME,
                constants.PACKAGE_LOCK_JSON_FILE_NAME,
            ];
            try {
                const additionalPaths = this.$projectConfigService.getValue("additionalPathsToClean");
                if (Array.isArray(additionalPaths)) {
                    pathsToClean.push(...additionalPaths);
                }
            }
            catch (err) {
            }
            const success = yield this.$projectCleanupService.clean(pathsToClean);
            if (success) {
                spinner.succeed("Project successfully cleaned.");
            }
            else {
                spinner.fail(`${"Project unsuccessfully cleaned.".red}`);
            }
        });
    }
}
exports.CleanCommand = CleanCommand;
yok_1.injector.registerCommand("clean", CleanCommand);
