'use strict'

const express = require('express')
const router  = express.Router()
const c       = require('../controllers/cotacaoController')
const inbox   = require('../controllers/inboxController')
const { verifyToken, verifyUserToken } = require('../middleware/auth')

// ── Rotas públicas (sem auth) — DEVEM vir antes de qualquer wildcard ──────────
router.get('/flash-promo',                    c.getFlashPromo)             // PROMO-10

// ── MON-01 — Monitor WhatsApp sem resposta ───────────────────────────────────
router.get('/admin/whatsapp/sem-resposta', verifyToken, async (req, res) => {
  try {
    const { getPendentes } = require('../jobs/monitorMsgsSemResposta')
    const limiar = Number(req.query.limiar) || 5
    const rows = await getPendentes(limiar)
    res.json(rows)
  } catch (err) {
    console.error('[sem-resposta]', err.message)
    res.status(500).json({ error: 'Erro ao buscar pendentes' })
  }
})

// ── Admin — pedidos (verifyToken) ─────────────────────────────────────────────
// ATENÇÃO: rotas específicas (/contadores, /notificacoes) ANTES do wildcard (/:id)
router.get('/admin/pedidos/contadores',    verifyToken, c.contadores)
router.get('/admin/pedidos/notificacoes',  verifyToken, c.notificacoes)    // DASH-04
router.get('/admin/financeiro',            verifyToken, c.listFinanceiro)
router.patch('/admin/financeiro/:id',      verifyToken, c.financeiroDecisao)
router.get('/admin/pedidos',               verifyToken, c.listPedidos)
router.get('/admin/pedidos/:id',           verifyToken, c.getPedido)
router.patch('/admin/pedidos/:id/status',  verifyToken, c.updateStatusPedido)
router.patch('/admin/pedidos/:id/equipe',  verifyToken, c.atribuirEquipe)
router.patch('/admin/pedidos/:id/embalagem', verifyToken, c.marcarEmbalado) // EMB-02
router.post('/admin/pedidos/:id/cupom',     verifyToken, c.registrarCupomFiscal)

// Atribuição de responsável por etapa (separador/auditor/fiscal — embalador
// usa /embalagem que também muda o status; expedidor usa /status com expedidor_id)
router.patch('/admin/pedidos/:id/responsavel/:funcao', verifyToken, c.setResponsavelEtapa)

// Lista de colaboradores aptos a uma função (filtrado pelo setor do colaborador
// em /admin-v2/equipe — sem precisar de mapeamento extra)
router.get('/admin/colaboradores/disponiveis', verifyToken, c.colaboradoresDisponiveis)
router.patch('/admin/pedidos/itens/:itemId/separado', verifyToken, c.marcarItemSeparado)
router.patch('/admin/pedidos/itens/:itemId/alerta',   verifyToken, c.setAlertaItem)
router.delete('/admin/pedidos/itens/:itemId/alerta',  verifyToken, c.limparAlertaItem)

// ── Flash Promo admin (PROMO-10) ──────────────────────────────────────────────
router.post('/admin/flash-promo',             verifyToken, c.createFlashPromo)
router.delete('/admin/flash-promo/:id',       verifyToken, c.cancelFlashPromo)

// ── Relatórios (FUT-04/05) ────────────────────────────────────────────────────
router.get('/admin/relatorio/ranking',        verifyToken, c.rankingEquipes)
router.get('/admin/relatorio/setor',          verifyToken, c.relatorioSetor)

// ── Admin — inbox interno (verifyToken) ───────────────────────────────────────
router.get('/admin/inbox/contadores',              verifyToken, inbox.contadores)
router.get('/admin/inbox/setor/:setor',            verifyToken, inbox.listBySetor)
router.get('/admin/inbox/pedido/:pedidoId',        verifyToken, inbox.listByPedido)
router.post('/admin/inbox',                        verifyToken, inbox.enviar)
router.patch('/admin/inbox/:id/lida',              verifyToken, inbox.marcarLida)
router.patch('/admin/inbox/pedido/:pedidoId/lidas', verifyToken, inbox.marcarTodasPedido)
router.patch('/admin/inbox/setor/:setor/lidas',    verifyToken, inbox.marcarTodasSetor)

// ── Área do cliente (verifyUserToken) — wildcard /:id por ÚLTIMO ──────────────
router.get('/carrinho',                   verifyUserToken, c.criarOuObterRascunho)
router.get('/minhas',                     verifyUserToken, c.minhas)
router.post('/itens',                     verifyUserToken, c.addItem)
router.delete('/:cotacaoId/itens/:itemId', verifyUserToken, c.removeItem)
router.patch('/:cotacaoId/itens/:itemId',          verifyUserToken, c.updateItemObs)
router.patch('/pedido-itens/:itemId/confirmar',    verifyUserToken, c.confirmarAlertaItem)
router.patch('/:id/salvar',              verifyUserToken, c.salvar)
router.post('/:id/finalizar',            verifyUserToken, c.finalizar)
router.get('/:id',                       verifyUserToken, c.getCotacao)    // wildcard POR ÚLTIMO

module.exports = router
