"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Lint = require("tslint");
class Rule extends Lint.Rules.AbstractRule {
    apply(sourceFile) {
        return this.applyWithWalker(new AdfFileName(sourceFile, this.getOptions()));
    }
}
Rule.metadata = {
    ruleName: 'adf-file-name',
    type: 'maintainability',
    description: `Enforce consistent name avoid prefix`,
    descriptionDetails: `See more at https://angular.io/styleguide#style-05-13.`,
    rationale: `Consistent conventions make it easy to quickly identify files when you search with autocomplete.`,
    options: null,
    optionsDescription: "Not configurable.",
    typescriptOnly: true,
};
Rule.FAILURE_STRING = 'The name of the File should not start with ADF Alfresco or Activiti prefix ';
Rule.FAILURE_STRING_UNDERSCORE = 'The name of the File should not have _ in the name but you can use - prefer the kebab case';
Rule.FAILURE_STRING_UPPERCASE = 'The name of the File should not start with uppercase';
exports.Rule = Rule;
class AdfFileName extends Lint.RuleWalker {
    visitSourceFile(node) {
        var whiteList = ['activiti-alfresco.service.ts', 'activiti-alfresco.service.spec.ts',
            'alfresco-api.service.ts', 'alfresco-api.service.spects'];
        var fileName = this.getFilename();
        var fileNameReg = /^(alfresco|activiti|adf|activity)/ig;
        var filenameMatch = fileNameReg.exec(fileName);
        var isWhiteListName = whiteList.find((currentWhiteListName) => {
            return currentWhiteListName === fileName;
        });
        if (filenameMatch && !isWhiteListName) {
            this.addFailure(this.createFailure(node.getStart(), node.getWidth(), Rule.FAILURE_STRING + fileName));
            super.visitSourceFile(node);
        }
        if (fileName.indexOf('_') >= 0) {
            this.addFailure(this.createFailure(node.getStart(), node.getWidth(), Rule.FAILURE_STRING_UNDERSCORE + fileName));
            super.visitSourceFile(node);
        }

        if (fileName[0] == fileName[0].toUpperCase()) {
            this.addFailure(this.createFailure(node.getStart(), node.getWidth(), Rule.FAILURE_STRING_UPPERCASE + fileName));
            super.visitSourceFile(node);
        }
    }
    getFilename() {
        const filename = this.getSourceFile().fileName;
        const lastSlash = filename.lastIndexOf('/');
        if (lastSlash > -1) {
            return filename.substring(lastSlash + 1);
        }
        return filename;
    }
}