const ExportService = require('../services/ExportService');

/**
 * Controller für Daten-Export
 * Verarbeitet HTTP-Requests und delegiert an ExportService
 */
class ExportController {
  /**
   * Exportiert Daten als CSV
   */
  async exportCSV(req, res) {
    try {
      const userId = req.user?.id || 1;
      const { startDate, endDate } = req.query;
      
      if (!startDate || !endDate) {
        return res.status(400).json({ 
          message: 'Start- und Enddatum sind erforderlich' 
        });
      }
      
      const csv = await ExportService.exportCSV(userId, startDate, endDate);
      
      res.setHeader('Content-Type', 'text/csv; charset=utf-8');
      res.setHeader('Content-Disposition', `attachment; filename="zeiterfassung_${startDate}_${endDate}.csv"`);
      res.send(csv);
    } catch (error) {
      console.error('Fehler beim CSV-Export:', error);
      res.status(500).json({ 
        message: 'Fehler beim Export',
        error: error.message 
      });
    }
  }

  /**
   * Exportiert Daten als Excel (.xlsx)
   */
  async exportExcel(req, res) {
    try {
      const userId = req.user?.id || 1;
      const { startDate, endDate } = req.query;
      
      if (!startDate || !endDate) {
        return res.status(400).json({ 
          message: 'Start- und Enddatum sind erforderlich' 
        });
      }
      
      const buffer = await ExportService.exportExcel(userId, startDate, endDate);
      
      res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
      res.setHeader('Content-Disposition', `attachment; filename="zeiterfassung_${startDate}_${endDate}.xlsx"`);
      res.send(buffer);
    } catch (error) {
      console.error('Fehler beim Excel-Export:', error);
      res.status(500).json({ 
        message: 'Fehler beim Export',
        error: error.message 
      });
    }
  }

  /**
   * Exportiert Daten für PDF (gibt JSON zurück, PDF wird im Frontend generiert)
   */
  async exportPDF(req, res) {
    try {
      const userId = req.user?.id || 1;
      const { startDate, endDate } = req.query;
      
      if (!startDate || !endDate) {
        return res.status(400).json({ 
          message: 'Start- und Enddatum sind erforderlich' 
        });
      }
      
      const data = await ExportService.exportPDFData(userId, startDate, endDate);
      res.json(data);
    } catch (error) {
      console.error('Fehler beim PDF-Export:', error);
      res.status(500).json({ 
        message: 'Fehler beim Export',
        error: error.message 
      });
    }
  }
}

module.exports = new ExportController();

