'use strict' const MensagemInterna = require('../models/MensagemInterna') const SETORES_VALIDOS = ['geral','atendimento','cotacao','separacao','embalagem','auditoria','fiscal','expedicao','financeiro','suporte'] const inboxController = { // INB-01 — Lista mensagens de um setor async listBySetor(req, res) { try { const { setor } = req.params if (!SETORES_VALIDOS.includes(setor)) return res.status(400).json({ error: 'Setor inválido' }) const somenteNaoLidas = req.query.nao_lidas === 'true' const rows = await MensagemInterna.listBySetor(req.tenant.id, setor, somenteNaoLidas) res.json(rows) } catch (err) { res.status(500).json({ error: 'Erro ao listar inbox' }) } }, // INB-02 — Lista mensagens de um pedido async listByPedido(req, res) { try { const rows = await MensagemInterna.listByPedido(req.params.pedidoId) res.json(rows) } catch (err) { res.status(500).json({ error: 'Erro ao listar mensagens do pedido' }) } }, // INB-02 — Envia mensagem interna (setor + pedido opcional) async enviar(req, res) { try { const { pedido_id, setor, mensagem } = req.body if (!setor || !mensagem) return res.status(400).json({ error: 'setor e mensagem são obrigatórios' }) if (!SETORES_VALIDOS.includes(setor)) return res.status(400).json({ error: 'Setor inválido' }) const remetente = req.user?.nome || req.user?.email || 'Sistema' const result = await MensagemInterna.create({ tenantId: req.tenant.id, pedidoId: pedido_id || null, setor, remetente, mensagem, }) res.status(201).json({ ok: true, id: result.id }) } catch (err) { console.error('[inbox.enviar]', err.message) res.status(500).json({ error: 'Erro ao enviar mensagem' }) } }, // INB-03 — Badge: contagem de não lidas por setor async contadores(req, res) { try { const rows = await MensagemInterna.contadorNaoLidas(req.tenant.id) const total = await MensagemInterna.totalNaoLidas(req.tenant.id) res.json({ total: Number(total?.total ?? 0), por_setor: rows }) } catch (err) { res.status(500).json({ error: 'Erro ao buscar contadores' }) } }, // Marcar lida async marcarLida(req, res) { try { await MensagemInterna.marcarLida(req.params.id) res.json({ ok: true }) } catch (err) { res.status(500).json({ error: 'Erro ao marcar lida' }) } }, // Marcar todas lidas de um pedido async marcarTodasPedido(req, res) { try { await MensagemInterna.marcarTodasLidasPorPedido(req.params.pedidoId) res.json({ ok: true }) } catch (err) { res.status(500).json({ error: 'Erro ao marcar lidas' }) } }, // Marcar todas lidas de um setor async marcarTodasSetor(req, res) { try { const { setor } = req.params await MensagemInterna.marcarTodasLidasPorSetor(req.tenant.id, setor) res.json({ ok: true }) } catch (err) { res.status(500).json({ error: 'Erro ao marcar lidas' }) } }, } module.exports = inboxController