import { Router, type IRouter } from 'express';
import { authenticate, authorize } from '../middlewares/auth.middleware.js';
import { tenantMiddleware } from '../middlewares/tenant.middleware.js';
import { requireFeature } from '../middlewares/feature-gate.middleware.js';
import { veryStrictLimit } from '../middlewares/rate-limit.middleware.js';
import * as documentosController from '../controllers/documentos.controller.js';

const router: IRouter = Router();

router.use(authenticate);
router.use(tenantMiddleware);
router.use(requireFeature('documentos'));

router.get('/opiniones', documentosController.listarOpiniones);
router.get('/opiniones/:id/pdf', documentosController.descargarPdf);
// 2/día — Playwright headless contra portal SAT es caro
router.post('/opiniones/consultar', veryStrictLimit, authorize('owner', 'cfo'), documentosController.consultarManual);

// Constancia de Situación Fiscal
router.get('/constancias', documentosController.listarConstancias);
router.get('/constancias/:id/pdf', documentosController.descargarConstanciaPdf);
router.post('/constancias/consultar', veryStrictLimit, authorize('owner', 'cfo'), documentosController.consultarConstanciaManual);

// Declaraciones provisionales
router.get('/declaraciones', documentosController.listarDeclaraciones);
router.post('/declaraciones', documentosController.crearDeclaracion);
router.post('/declaraciones/:id/comprobante-pago', documentosController.subirComprobantePago);
router.get('/declaraciones/:id/pdf/:variant', documentosController.descargarDeclaracionPdf);
router.delete('/declaraciones/:id', documentosController.eliminarDeclaracion);

// Extras (PDFs libres)
router.get('/extras', documentosController.listarExtras);
router.get('/extras/categorias', documentosController.listarCategoriasExtras);
router.post('/extras', documentosController.crearExtra);
router.get('/extras/:id/pdf', documentosController.descargarExtraPdf);
router.delete('/extras/:id', documentosController.eliminarExtra);

// Evidencias de obligaciones fiscales
router.get('/obligacion-evidencias', documentosController.listarEvidenciasObligacion);
router.post('/obligacion-evidencias', documentosController.crearEvidenciaObligacion);
router.get('/obligacion-evidencias/:id/pdf', documentosController.descargarEvidenciaObligacion);
router.delete('/obligacion-evidencias/:id', documentosController.eliminarEvidenciaObligacion);

export { router as documentosRoutes };
