import type { Detection } from '../core/types.js'; import { TECNOLOGIAS } from './tecnologias.js'; export function montarTrilha(deteccoes: Detection[]): string[] { const ancora = escolherAncora(deteccoes); const base = (ancora && TECNOLOGIAS[ancora]?.aprenderEmOrdem) || [ 'HTML semântico', 'CSS (layout e responsividade)', 'JavaScript moderno', 'como o navegador conversa com o servidor (HTTP)', ]; const passos = [...base]; const temInfra = deteccoes.some( (d) => d.categorias.includes('CDN') || d.categorias.includes('PaaS'), ); if (temInfra && !passos.some((p) => p.toLowerCase().includes('implanta'))) { passos.push('implantação e entrega (CDN, hospedagem/serverless)'); } return dedup(passos); } function escolherAncora(deteccoes: Detection[]): string | undefined { const porCategoria = (cat: string) => deteccoes .filter((d) => d.categorias.includes(cat)) .sort((a, b) => b.confianca - a.confianca)[0]?.nome; return ( porCategoria('Web frameworks') ?? porCategoria('Static site generator') ?? porCategoria('CMS') ?? porCategoria('JavaScript frameworks') ?? porCategoria('Ecommerce') ?? porCategoria('JavaScript libraries') ); } function dedup(itens: string[]): string[] { const vistos = new Set(); const saida: string[] = []; for (const item of itens) { const chave = item.toLowerCase(); if (!vistos.has(chave)) { vistos.add(chave); saida.push(item); } } return saida; }