import chalk from 'chalk'; import ora from 'ora'; import { analisarSite } from '../../core/pipeline.js'; import { montarTrilha } from '../../knowledge/trilhas.js'; import { TECNOLOGIAS, significadoGenerico } from '../../knowledge/tecnologias.js'; export interface OpcoesEstudar { completo?: boolean; } export async function comandoEstudar(url: string, opcoes: OpcoesEstudar): Promise { const spinner = ora({ text: 'analisando…', stream: process.stderr }).start(); const rep = await analisarSite(url, { modo: opcoes.completo ? 'completo' : 'rapido', aoProgredir: (etapa) => (spinner.text = etapa), }); spinner.stop(); const linhas: string[] = []; linhas.push(chalk.bold('O site utiliza:')); const relevantes = rep.deteccoes.filter((d) => d.confianca >= 50).slice(0, 8); if (!relevantes.length) { linhas.push(chalk.dim(' Não reconheci tecnologias com confiança suficiente para uma trilha.')); process.stdout.write(linhas.join('\n') + '\n'); return; } for (const d of relevantes) { const resumo = TECNOLOGIAS[d.nome]?.significado ?? significadoGenerico(d.categorias); const curto = resumo.split(/[.—]/)[0]?.trim() ?? resumo; linhas.push(` ${chalk.red(d.nome)} ${chalk.dim('→')} ${curto}`); } linhas.push(''); linhas.push(chalk.bold('Para compreender uma estrutura semelhante, estude nesta ordem:')); montarTrilha(rep.deteccoes).forEach((passo, i) => { linhas.push(` ${chalk.red(`${i + 1}.`)} ${passo}`); }); process.stdout.write(linhas.join('\n') + '\n'); }