# Etapa 2 - Resolucao de links Mercado Livre

## Status

- Situacao: **Concluido**
- Objetivo da etapa: para cada link Mercado Livre capturado na Etapa 1, resolver a URL encurtada/afiliada, fazer scraping da pagina, extrair o link real do produto e o MLB, e imprimir resultado para validacao.

---

## Contexto

Links que chegam dos grupos Telegram para ML podem ser:

- `meli.la/XXXXX` — encurtador oficial do ML
- `mercadolivre.com/sec/XXXXX` — outro encurtador ML
- `mercadolivre.com/social/{nome}` — pagina de perfil de afiliado (vitrine)
- `produto.mercadolivre.com.br/MLB-XXXXX` — link direto do produto (ideal)
- `www.mercadolivre.com.br/...` — link normal do produto

A URL original **nao serve para deduplicacao**. Apenas o `MLB` do produto e confiavel.

---

## Fluxo da Etapa 2

1. Receber URL Mercado Livre (qualquer formato).
2. Resolver redirecionamentos (seguir HTTP 301/302 ate URL final).
3. Identificar tipo da URL final:
   - produto direto (`MLB` na URL) -> extrair MLB direto.
   - pagina social/afiliado (`/social/`) -> scrapar HTML e buscar botao "Ir para produto".
4. Extrair `MLB` do link do produto.
5. Imprimir resultado intermediario:
   - URL original
   - URL final apos redirecionamentos
   - Tipo detectado (produto direto / pagina social)
   - MLB extraido
   - Status (ok / erro)

---

## Regras de negocio

- Apenas 1 botao "Ir para produto" esperado por pagina de afiliado de produto unico.
- Se encontrar 0 botoes: registrar erro, nao processar.
- Se encontrar >1 botoes: tratar como vitrine/categoria (fora do escopo desta etapa).
- O `MLB` e a chave de deduplicacao; nunca deduplicar pela URL original.

---

## Criterios de aceite da Etapa 2

- Para `meli.la/XXXXX`: resolver redirecionamentos e chegar na URL final.
- Para pagina social (`/social/{nome}`): scrapar e extrair MLB do produto.
- Para link direto com MLB na URL: extrair MLB sem scraping.
- Imprimir resultado claro no terminal para validacao manual.
- Erros registrados sem interromper processamento dos demais links.

---

## Checklist tecnico

- [x] Comando `telegram:resolve-ml {url}` criado.
- [x] Resolucao de redirecionamentos HTTP implementada.
- [x] Deteccao de tipo de URL ML implementada.
- [x] Scraping de pagina social para extrair botao "Ir para produto".
- [x] Extracao de MLB da URL do produto.
- [x] Saida de validacao impressa no terminal.
- [x] Tratamento de erro por URL sem interromper o batch.

## Validacao

Teste com `https://meli.la/2v7F9xZ`:
- URL original: `https://meli.la/2v7F9xZ`
- MLB extraido: `MLB-20683990`
- Status: ok
- Confirmado: URLs finais diferentes em cada execucao, MLB sempre o mesmo.

---

## Proxima etapa (Etapa 3)

**Status: Concluido** — ver `docs/TELEGRAM_ETAPA_3_SCRAPING_PRODUTO.md`

Apos validar extracao do MLB:

1. Buscar dados do produto (titulo, preco De/Por, % OFF) via scraping.
2. Limpar URL antes do scraping (remover `?matt_*` e `#fragment`).
3. Montar texto final para repost com link original preservado.
4. Salvar `formatted_text` em `processed_offers`.
