// src/commands/avStatus.js // // Chat + HTTP entry point for /avstatus. The heavy rendering lives in // services/renderers/avStatusRenderer.js so the Jira poller can emit // the same markdown (see services/jiraPollerService.js). This handler // stays thin: parse args, call the collector, hand data to the renderer, // respond. import { collectDeviceStatus } from '../services/deviceService.js'; import { renderAvStatusMarkdown } from '../services/renderers/avStatusRenderer.js'; import { logger } from '../utils/logger.js'; export async function handleAvStatus(bot, trigger) { logger('device:status', 'Handler entered', 'debug'); const query = trigger.query || {}; const args = trigger.args || []; let storeNum = args[0]?.trim() || query.storeNum || query.store || query.s; const isDetailed = (args[1]?.toLowerCase() === 'detailed') || (query.mode === 'detailed') || (query.detailed === 'true' || query.detailed === true); if (!storeNum || !/^\d{2,4}$/.test(storeNum)) { const errorMsg = 'Please provide a 2–4 digit store number.\n' + 'Example: `/avstatus 782` (or `detailed` / `?detailed=true` for more; includes Meraki deep links) or `https://.../avstatus?storeNum=782`'; await bot.say('markdown', errorMsg); return; } logger('device:status', `Collecting AV device status for store ${storeNum} in detailed mode`, 'debug'); try { const data = await collectDeviceStatus(storeNum); const reply = renderAvStatusMarkdown(data, { storeNum, detailed: isDetailed, footer: true, }); await bot.say('markdown', reply); const mdmDevices = data.mdm?.data || []; logger('device:status', `Rendered detailed view for ${mdmDevices.length} MDM devices`); } catch (err) { logger('device:status', `Error: ${err.message}`, 'error'); await bot.say('markdown', `❌ Error collecting device status: ${err.message}`); } }