// routes/reports.js const express = require('express'); require('dotenv').config(); const router = express.Router(); const nodemailer = require('nodemailer'); const GameSession = require('../models/GameSession'); const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS } }); router.post('/generate-report', async (req, res) => { const { username, email } = req.body; if (!username || !email) { return res.status(400).json({ success: false, message: 'Username and email are required' }); } try { // Fetch all sessions for the user const sessions = await GameSession.find({ username }).sort({ createdAt: -1 }); if (sessions.length === 0) { return res.status(404).json({ success: false, message: 'No session data found for this user' }); } // Generate report content const report = generateReportContent(username, sessions); // Email configuration const mailOptions = { from: 'shiharahimalshi@gmail.com', to: email, subject: `Game Session Report for ${username}`, html: report }; // Send email await transporter.sendMail(mailOptions); res.json({ success: true, message: 'Report sent successfully to ' + email }); } catch (err) { console.error('Report generation error:', err); res.status(500).json({ success: false, message: 'Failed to generate report', error: err.message }); } }); function generateReportContent(username, sessions) { // Calculate statistics const totalSessions = sessions.length; const totalPlayTime = sessions.reduce((sum, session) => sum + session.durationSeconds, 0); const averagePlayTime = Math.round(totalPlayTime / totalSessions); const levelsPlayed = [...new Set(sessions.map(s => s.levelNumber))].sort((a, b) => a - b); // Format play time const formatTime = (seconds) => { const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = seconds % 60; return `${hours}h ${minutes}m ${secs}s`; }; // Generate professional report-style HTML let html = `
Generated on: ${new Date().toLocaleDateString()}
Date | Level | Duration | Performance |
---|---|---|---|
${date} | Level ${session.levelNumber} | ${formatTime(session.durationSeconds)} | ${performance} |