"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.analisarDocumentario = analisarDocumentario;
const REGEX_PARAMETRO = /^@(?:par[aâ]metro|param)\s+(?:\{([^}]+)\}\s+)?(\S+)\s*(.*)$/;
const REGEX_RETORNA = /^@(?:retorna)\s*(?:\{([^}]+)\}\s*)?(.*)$/;
const REGEX_EXEMPLO = /^@(?:exemplo)\s*(.*)$/;
const REGEX_DEPRECIADO = /^@depreciado\s*(.*)$/;
const REGEX_VEJA = /^@veja\s+(\S+).*$/;
const REGEX_TAG = /^@\w+/;
function segmentar(linhas) {
    var _a, _b;
    const segmentos = [];
    let atual = { tag: '', linhas: [] };
    for (const linha of linhas) {
        if (REGEX_TAG.test(linha)) {
            segmentos.push(atual);
            const tag = (_b = (_a = linha.match(/^@(\w+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : '';
            atual = { tag, linhas: [linha] };
        }
        else {
            atual.linhas.push(linha);
        }
    }
    segmentos.push(atual);
    return segmentos;
}
function analisarDocumentario(conteudo) {
    var _a;
    const resultado = {
        descricao: '',
        parametros: [],
        veja: [],
    };
    const linhas = conteudo.split('\n');
    const segmentos = segmentar(linhas);
    for (const segmento of segmentos) {
        if (segmento.tag === '') {
            resultado.descricao = segmento.linhas.join('\n').trim();
            continue;
        }
        const primeiraLinha = (_a = segmento.linhas[0]) !== null && _a !== void 0 ? _a : '';
        let m;
        m = primeiraLinha.match(REGEX_PARAMETRO);
        if (m) {
            resultado.parametros.push({
                tipo: m[1] || undefined,
                nome: m[2],
                descricao: m[3].trim(),
            });
            continue;
        }
        m = primeiraLinha.match(REGEX_RETORNA);
        if (m) {
            resultado.retorna = {
                tipo: m[1] || undefined,
                descricao: m[2].trim(),
            };
            continue;
        }
        m = primeiraLinha.match(REGEX_EXEMPLO);
        if (m) {
            const restoLinha = m[1].trim();
            const linhasExtras = segmento.linhas.slice(1).join('\n').trim();
            resultado.exemplo = restoLinha
                ? restoLinha + (linhasExtras ? '\n' + linhasExtras : '')
                : linhasExtras;
            continue;
        }
        m = primeiraLinha.match(REGEX_DEPRECIADO);
        if (m) {
            resultado.depreciado = m[1].trim();
            continue;
        }
        m = primeiraLinha.match(REGEX_VEJA);
        if (m) {
            resultado.veja.push(m[1].trim());
            continue;
        }
        // tag desconhecida: ignorada silenciosamente
    }
    return resultado;
}
//# sourceMappingURL=index.js.map