"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TradutorCalango = void 0;
class TradutorCalango {
    constructor() {
        this.indentacao = 0;
        this.dicionarioConstrutos = {
            FormatacaoEscrita: this.traduzirConstrutoFormatacaoEscrita.bind(this),
            Literal: this.traduzirConstrutoLiteral.bind(this),
        };
        this.dicionarioDeclaracoes = {
            Escreva: this.traduzirDeclaracaoEscreva.bind(this),
            EscrevaMesmaLinha: this.traduzirDeclaracaoEscrevaMesmaLinha.bind(this),
        };
    }
    traduzirConstrutoFormatacaoEscrita(formatacaoEscrita) {
        const avaliacaoExpressao = this.dicionarioConstrutos[formatacaoEscrita.expressao.constructor.name](formatacaoEscrita.expressao);
        return `${avaliacaoExpressao}`;
    }
    traduzirConstrutoLiteral(literal) {
        if (typeof literal.valor === 'string')
            return `'${literal.valor}'`;
        return String(literal.valor);
    }
    traduzirDeclaracaoEscreva(declaracaoEscreva) {
        let resultado = 'escreva(';
        for (const argumento of declaracaoEscreva.argumentos) {
            const valor = this.dicionarioConstrutos[argumento.constructor.name](argumento);
            resultado += valor + ', ';
        }
        resultado = resultado.slice(0, -2);
        resultado += ')';
        return resultado;
    }
    traduzirDeclaracaoEscrevaMesmaLinha(declaracaoEscreva) {
        let resultado = 'escreva(';
        for (const argumento of declaracaoEscreva.argumentos) {
            const valor = this.dicionarioConstrutos[argumento.constructor.name](argumento);
            resultado += valor + ', ';
        }
        resultado = resultado.slice(0, -2);
        resultado += ')';
        return resultado;
    }
    traduzir(declaracoes) {
        let resultado = '';
        for (const declaracao of declaracoes) {
            resultado += `${this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao)} \n`;
        }
        return resultado;
    }
}
exports.TradutorCalango = TradutorCalango;
//# sourceMappingURL=tradutor-calango.js.map