const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

// Ativa o modo de camuflagem para evitar detecção
puppeteer.use(StealthPlugin());

class MercadoLivreScraper {
    async extrairDados() {
        console.log('Iniciando extração de promoções do Mercado Livre...');

        const browser = await puppeteer.launch({ 
            headless: true, 
            args: [
                '--no-sandbox', 
                '--disable-setuid-sandbox',
                '--disable-blink-features=AutomationControlled'
            ] 
        });
        const page = await browser.newPage();

        // Define um User-Agent e resolução de tela de um usuário real
        await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
        await page.setViewport({ width: 1366, height: 768 });

        try {
            await page.goto('https://www.mercadolivre.com.br/ofertas', { waitUntil: 'networkidle2' });
            await page.waitForSelector('.poly-card', { timeout: 15000 });

            const produtos = await page.evaluate(() => {
                const itens = document.querySelectorAll('.poly-card');
                const resultados = [];

                itens.forEach(item => {
                    const elementoTitulo = item.querySelector('.poly-component__title') || item.querySelector('h2');
                    const nomeProduto = elementoTitulo ? elementoTitulo.innerText.trim() : 'Sem título';

                    const elementoMarca = item.querySelector('.poly-component__brand');
                    const marca = elementoMarca ? elementoMarca.innerText.trim() : '';
                    const tituloFinal = marca ? `${marca} - ${nomeProduto}` : nomeProduto;

                    const elementoLink = item.querySelector('a');
                    const linkProduto = elementoLink ? elementoLink.href : 'Sem link';

                    const elementoImagem = item.querySelector('img');
                    const imagem = elementoImagem ? (elementoImagem.getAttribute('data-src') || elementoImagem.src) : 'Sem imagem';

                    const elementoPreco = item.querySelector('.andes-money-amount__fraction');
                    const precoPromocao = elementoPreco ? parseFloat(elementoPreco.innerText.replace('.', '').replace(',', '.')) : 0;

                    const elementoPrecoOriginal = item.querySelector('s .andes-money-amount__fraction') || item.querySelector('.poly-price__old .andes-money-amount__fraction');
                    const precoOriginal = elementoPrecoOriginal ? parseFloat(elementoPrecoOriginal.innerText.replace('.', '').replace(',', '.')) : precoPromocao;

                    let porcentagemPromo = 0;
                    if (precoOriginal > 0 && precoOriginal > precoPromocao) {
                        porcentagemPromo = Math.round(((precoOriginal - precoPromocao) / precoOriginal) * 100);
                    }

                    resultados.push({
                        nomeProduto: tituloFinal,
                        linkProduto: linkProduto,
                        precoOriginal: precoOriginal,
                        precoPromocao: precoPromocao,
                        porcentagemPromo: porcentagemPromo,
                        imagem: imagem
                    });
                });

                return resultados;
            });

            console.log(`\n--- DIAGNÓSTICO FINAL ---`);
            console.log(`O robô enxergou ${produtos.length} cartões na página em modo invisível.`);
            console.log(`-------------------------\n`);

            await browser.close();
            return produtos;

        } catch (error) {
            console.error('Erro durante a extração:', error.message);
            await browser.close();
            return [];
        }
    }
}

module.exports = MercadoLivreScraper;