'use strict';
const express  = require('express');
const router   = express.Router();
const { sanitizeDate }   = require('../utils/validate');
const { createError }    = require('../utils/errorHandler');

// authMiddleware ya se aplica globalmente en index.js para /api — no duplicar

// Intentar cargar exceljs al arrancar — si falla, el endpoint devuelve 503 claro
let _exceljsOk = false;
try { require('exceljs'); _exceljsOk = true; } catch(_) {}

// GET /api/reporte-semanal/excel?inicio=YYYY-MM-DD&fin=YYYY-MM-DD
router.get('/excel', async (req, res, next) => {
  try {
    if (!_exceljsOk) {
      throw createError(
        'El módulo exceljs no está instalado. Ejecuta ACTUALIZAR-VERSION.bat para instalarlo automáticamente.', 503
      );
    }

    const inicio = sanitizeDate(req.query.inicio);
    const fin    = sanitizeDate(req.query.fin);

    if (!inicio || !fin)
      throw createError('Se requieren parámetros inicio y fin (YYYY-MM-DD)', 400);
    if (inicio > fin)
      throw createError('La fecha de inicio debe ser anterior o igual a la fecha de fin', 400);

    const dias = Math.round((new Date(fin) - new Date(inicio)) / 86400000) + 1;
    if (dias > 7)
      throw createError('El rango máximo para el reporte semanal es 7 días', 400);
    if (dias < 1)
      throw createError('Rango de fechas inválido', 400);

    const svc = require('../services/reporteSemanalService');
    const wb  = await svc.generarReporteSemanal(inicio, fin);

    const MESES = ['ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'];
    const d1    = new Date(inicio + 'T00:00:00');
    const d2    = new Date(fin    + 'T00:00:00');
    const filename = `REPORTE_${d1.getDate()}${MESES[d1.getMonth()]}-${d2.getDate()}${MESES[d2.getMonth()]}_${d1.getFullYear()}.xlsx`;

    res.setHeader('Content-Type',
      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    res.setHeader('Content-Disposition',
      `attachment; filename="${filename}"; filename*=UTF-8''${encodeURIComponent(filename)}`);
    res.setHeader('Cache-Control', 'no-cache, no-store');

    await wb.xlsx.write(res);
    res.end();
  } catch(err) { next(err); }
});

// GET /api/reporte-semanal/status — ping para saber si exceljs está listo
router.get('/status', (_req, res) => {
  res.json({ ok: _exceljsOk, mensaje: _exceljsOk
    ? 'Excel Semanal disponible'
    : 'exceljs no instalado — ejecuta ACTUALIZAR-VERSION.bat'
  });
});

module.exports = router;
