import { detectarArquetipos, extrairSinaisAvancados, gerarPlanoEstrategico } from '../architects/index.js';
import { config } from '../../core/config/index.js';
import { getMessages } from '../../core/messages/index.js';
import { corrigirEstrutura } from '../corrections/corrector-structure.js';
const { log, MENSAGENS_ARQUETIPOS_HANDLER } = getMessages();
export const OperarioEstrutura = {
    async planejar(baseDir, fileEntriesComAst, opcoes) {
        const emTeste = !!process.env.VITEST;
        const podeUsarArquetipos = !!opcoes.preset && !opcoes.preferEstrategista && (opcoes.preset !== 'tutanus' || emTeste);
        if (podeUsarArquetipos) {
            try {
                const arqs = await detectarArquetipos({
                    arquivos: fileEntriesComAst,
                    baseDir,
                    ...(opcoes.preset ? {
                        preset: opcoes.preset
                    } : undefined)
                }, baseDir);
                const planoArq = arqs.candidatos[0]?.planoSugestao;
                if (planoArq && Array.isArray(planoArq.mover)) {
                    return {
                        plano: planoArq,
                        origem: 'arquetipos'
                    };
                }
            }
            catch (erro) {
                log.aviso(MENSAGENS_ARQUETIPOS_HANDLER.falha);
                if (config.DEV_MODE)
                    console.error(erro);
            }
        }
        try {
            try {
                const sinaisAvancados = extrairSinaisAvancados(fileEntriesComAst, undefined, undefined, baseDir, fileEntriesComAst.map(arquivo => arquivo.relPath));
                const planoAlt = await gerarPlanoEstrategico({
                    arquivos: fileEntriesComAst,
                    baseDir
                }, {
                    criarSubpastasPorEntidade: opcoes.criarSubpastasPorEntidade,
                    categoriasMapa: opcoes.categoriasMapa,
                    ...(opcoes.preset ? {
                        preset: opcoes.preset
                    } : {})
                }, sinaisAvancados);
                if (planoAlt && Array.isArray(planoAlt.mover)) {
                    return {
                        plano: planoAlt,
                        origem: 'estrategista'
                    };
                }
            }
            catch (erro) {
                log.aviso(MENSAGENS_ARQUETIPOS_HANDLER.falhaEstrategista);
                if (config.DEV_MODE)
                    console.error(erro);
            }
            return {
                plano: undefined,
                origem: 'nenhum'
            };
        }
        catch (erro) {
            log.aviso(MENSAGENS_ARQUETIPOS_HANDLER.falhaGeral);
            if (config.DEV_MODE)
                console.error(erro);
            return {
                plano: undefined,
                origem: 'nenhum'
            };
        }
    },
    toMapaMoves(plano) {
        if (!plano || !Array.isArray(plano.mover))
            return [];
        return plano.mover.map((metrica) => {
            const para = String(metrica.para || '');
            const idx = para.lastIndexOf('/');
            const ideal = idx > 0 ? para.substring(0, idx) : null;
            return {
                arquivo: metrica.de,
                ideal,
                atual: metrica.de
            };
        });
    },
    async aplicar(mapaMoves, fileEntriesComAst, baseDir) {
        await corrigirEstrutura(mapaMoves, fileEntriesComAst, baseDir);
    },
    ocorrenciasParaMapa(ocorrencias) {
        const mapa = [];
        if (!ocorrencias || !ocorrencias.length)
            return mapa;
        for (const occ of ocorrencias) {
            const rel = occ.relPath ?? occ.arquivo ?? 'arquivo desconhecido';
            mapa.push({
                arquivo: rel,
                ideal: null,
                atual: rel
            });
        }
        return mapa;
    }
};
//# sourceMappingURL=operator-structure.js.map