const express = require('express'); const { verifyToken } = require('../auth'); const { getClientAnalytics, getClientDetailsAnalytics, getClientFilterOptions, getClientPurchasePatternAnalytics, getDashboardAnalytics, getProductAnalytics, getProductDetailsAnalytics, getRfmAnalytics } = require('../services/analyticsService'); const router = express.Router(); const getRange = (query) => ({ start: query.start, end: query.end }); const getClientAnalyticsFilters = (query) => ({ ...getRange(query), marketplace: query.marketplace, canal_venda: query.canal_venda, seller: query.seller }); router.get('/analytics/dashboard', verifyToken, async (req, res) => { try { res.json(await getDashboardAnalytics(getRange(req.query))); } catch (error) { console.error('Error fetching dashboard analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/products', verifyToken, async (req, res) => { try { res.json(await getProductAnalytics(getRange(req.query))); } catch (error) { console.error('Error fetching product analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/products/:productId/details', verifyToken, async (req, res) => { try { const details = await getProductDetailsAnalytics(req.params.productId, getRange(req.query)); if (!details) { res.status(404).json({ error: 'Product not found' }); return; } res.json(details); } catch (error) { console.error('Error fetching product details analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/clients', verifyToken, async (req, res) => { try { res.json(await getClientAnalytics(getClientAnalyticsFilters(req.query))); } catch (error) { console.error('Error fetching client analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/clients/filters', verifyToken, async (req, res) => { try { res.json(await getClientFilterOptions(getRange(req.query))); } catch (error) { console.error('Error fetching client filter options:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/clients/purchase-pattern', verifyToken, async (req, res) => { try { res.json(await getClientPurchasePatternAnalytics()); } catch (error) { console.error('Error fetching client purchase pattern analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/clients/:clientToken/details', verifyToken, async (req, res) => { try { const details = await getClientDetailsAnalytics(req.params.clientToken, getRange(req.query)); if (!details) { res.status(404).json({ error: 'Client not found' }); return; } res.json(details); } catch (error) { console.error('Error fetching client details analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); router.get('/analytics/rfm', verifyToken, async (req, res) => { try { res.json(await getRfmAnalytics(getClientAnalyticsFilters(req.query))); } catch (error) { console.error('Error fetching RFM analytics:', error); res.status(500).json({ error: 'Internal Server Error' }); } }); module.exports = router;