const ProductEntity = require('../domain/ProductEntity');

class ProcessPromotionsUseCase {
    constructor(scraper, affiliateGenerator, apiClient) {
        this.scraper = scraper;
        this.affiliateGenerator = affiliateGenerator;
        this.apiClient = apiClient;
    }

    async executar() {
        console.log("Iniciando processamento das promoções...");

        const dadosBrutos = await this.scraper.extrairDados();
        const dadosComAfiliacao = await this.affiliateGenerator.converterLista(dadosBrutos);

        let enviados = 0;

        for (const dado of dadosComAfiliacao) {
            const produto = new ProductEntity(dado);

            if (produto.isValid()) {
                await this.apiClient.enviarProduto(produto);
                enviados++;
            }
        }

        console.log(`Processo finalizado! ${enviados} produtos foram enviados para a API.`);
    }
}

module.exports = ProcessPromotionsUseCase;