const axios = require('axios'); const { apiConfig, apiViabilidadeUrl } = require('../config/apiConfig'); const DEFAULT_TIMEOUT = (apiConfig && apiConfig.timeoutMs) || 10000; const MAX_RETRIES = (apiConfig && apiConfig.maxRetries) || 3; const BASE_BACKOFF_MS = (apiConfig && apiConfig.baseBackoffMs) || 500; function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); } function normalizeResponse(body) { if (!body) return { error: 'Resposta vazia', raw: body }; // Caso já venha com distancia/distance direto if (typeof body === 'object') { if (body.distancia || body.distance) { return { distancia: body.distancia || body.distance, raw: body }; } // formato antigo com array registros if (Array.isArray(body.registros) && body.registros.length) { // seleciona o registro com menor distancia (se existir) let min = null; for (const r of body.registros) { const d = r.distancia ?? r.distance ?? null; if (d == null) continue; if (min == null || d < min.d) min = { d, r }; } return { distancia: min ? min.d : null, parceiro: min ? (min.r.pastaSigla || min.r.parceiro || null) : null, raw: body }; } // fallback: retorna body bruto para inspeção return { raw: body }; } return { raw: body }; } async function consultarViabilidade(data) { try { const response = await axios.post(apiViabilidadeUrl, data, { timeout: DEFAULT_TIMEOUT, headers: { 'Content-Type': 'application/json' } }); return (response.data); } catch (error) { throw error; } } module.exports = { consultarViabilidade };