"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chalk = require("chalk");
const indent = require("indent-string");
const stripAnsi = require("strip-ansi");
const util_1 = require("./util");
const wrap = require('wrap-ansi');
const { bold, } = chalk;
class RootHelp {
    constructor(config, opts) {
        this.config = config;
        this.opts = opts;
        this.render = util_1.template(this);
    }
    root() {
        let description = this.config.pjson.oclif.description || this.config.pjson.description || '';
        description = this.render(description);
        description = description.split('\n')[0];
        let output = util_1.compact([
            description,
            this.version(),
            this.usage(),
            this.description(),
        ]).join('\n\n');
        if (this.opts.stripAnsi)
            output = stripAnsi(output);
        return output;
    }
    usage() {
        return [
            bold('USAGE'),
            indent(wrap(`$ ${this.config.bin} [COMMAND]`, this.opts.maxWidth - 2, { trim: false, hard: true }), 2),
        ].join('\n');
    }
    description() {
        let description = this.config.pjson.oclif.description || this.config.pjson.description || '';
        description = this.render(description);
        description = description.split('\n').slice(1).join('\n');
        if (!description)
            return;
        return [
            bold('DESCRIPTION'),
            indent(wrap(description, this.opts.maxWidth - 2, { trim: false, hard: true }), 2),
        ].join('\n');
    }
    version() {
        return [
            bold('VERSION'),
            indent(wrap(this.config.userAgent, this.opts.maxWidth - 2, { trim: false, hard: true }), 2),
        ].join('\n');
    }
}
exports.default = RootHelp;
