prepare("SELECT last_run FROM automation_logs WHERE task_name = ? AND DATE(last_run) = ?"); $stmt->execute([$task_name, $today]); if ($stmt->fetch()) { exit("Report already sent today ($today). Skip.\n"); } echo "Generating weekly report for $today...\n"; // Reuse logic from weekly_report.php (simplified for automation) // 1. Get stats for the last 7 days $stats_query = " SELECT COUNT(*) as total_requests, SUM(CASE WHEN source = 'whatsapp' THEN 1 ELSE 0 END) as whatsapp_requests, SUM(CASE WHEN source != 'whatsapp' OR source IS NULL THEN 1 ELSE 0 END) as web_requests FROM song_requests WHERE created_at > DATE_SUB(NOW(), INTERVAL 7 DAY) "; $totals = $db->query($stats_query)->fetch(); // 2. Top 10 Requesters $top_requesters = $db->query(" SELECT requester, COUNT(*) as count FROM song_requests WHERE created_at > DATE_SUB(NOW(), INTERVAL 7 DAY) AND requester IS NOT NULL AND requester != '' AND requester != 'Anónimo' GROUP BY requester ORDER BY count DESC LIMIT 10 ")->fetchAll(); // 3. Top 10 Songs (by requests) $top_songs_requested = $db->query(" SELECT artist, song, COUNT(*) as count FROM song_requests WHERE created_at > DATE_SUB(NOW(), INTERVAL 7 DAY) GROUP BY artist, song ORDER BY count DESC LIMIT 10 ")->fetchAll(); // 4. Top 10 Songs (by likes) $top_songs_liked = $db->query(" SELECT song_title, likes_count FROM song_likes WHERE last_liked_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) ORDER BY likes_count DESC LIMIT 10 ")->fetchAll(); // 5. Top 10 Chat Interactors $top_chatters = $db->query(" SELECT username, COUNT(*) as count FROM messages WHERE created_at > DATE_SUB(NOW(), INTERVAL 7 DAY) AND username IS NOT NULL AND username != '' AND username != 'Anónimo' GROUP BY username ORDER BY count DESC LIMIT 10 ")->fetchAll(); // 6. Award Fan Points to Top 3 Chatters (Locking to prevent double rewards) $rewards = [50, 30, 20]; $rewarded_users = []; $today = date('Y-m-d'); $stmt_lock = $db->prepare("SELECT last_run FROM automation_logs WHERE task_name = 'weekly_report_rewards' AND DATE(last_run) = ?"); $stmt_lock->execute([$today]); if (!$stmt_lock->fetch()) { foreach ($top_chatters as $i => $c) { if ($i >= 3) break; $username = $c['username']; $points_to_add = $rewards[$i]; $stmt_fan = $db->prepare("SELECT id FROM fans WHERE name = ?"); $stmt_fan->execute([$username]); $fan = $stmt_fan->fetch(); if ($fan) { $db->prepare("UPDATE fans SET points = points + ? WHERE id = ?")->execute([$points_to_add, $fan['id']]); } else { $db->prepare("INSERT INTO fans (name, points) VALUES (?, ?)")->execute([$username, $points_to_add]); } $rewarded_users[$username] = $points_to_add; } // Bot message to chat if (!empty($rewarded_users)) { $bot_msg = "🏆 ¡Atención comunidad! El Top 3 de interactores de esta semana ha sido premiado:\n\n"; $medals = ["🥇", "🥈", "🥉"]; $idx = 0; foreach ($rewarded_users as $user => $pts) { $bot_msg .= "{$medals[$idx]} $user: +$pts Fan Points\n"; $idx++; } $bot_msg .= "\n¡Sigue participando en el chat para ganar el próximo lunes! 📻✨"; $db->prepare("INSERT INTO messages (username, ip_address, message, type) VALUES (?, ?, ?, ?)") ->execute(['Lili Bot 🤖', '127.0.0.1', $bot_msg, 'text']); } $db->prepare("INSERT INTO automation_logs (task_name, last_run) VALUES ('weekly_report_rewards', NOW()) ON DUPLICATE KEY UPDATE last_run = NOW()")->execute(); } else { // If already rewarded today, we still want to show it in the email being generated foreach ($top_chatters as $i => $c) { if ($i >= 3) break; $rewarded_users[$c['username']] = $rewards[$i]; } } $report_date = date('d/m/Y'); $week_start = date('d/m/Y', strtotime('-7 days')); $html_content = "

Reporte Semanal Automático - Lili Records Radio

Periodo: $week_start al $report_date

Total Peticiones

{$totals['total_requests']}

Vía WhatsApp

{$totals['whatsapp_requests']}

Vía Web

{$totals['web_requests']}

🏆 Top 10 Oyentes de la Semana

"; foreach ($top_requesters as $i => $r) { $crown = ($i === 0) ? "👑 " : ""; $html_content .= ""; } $html_content .= "
#OyentePeticiones
" . ($i + 1) . "$crown" . htmlspecialchars($r['requester']) . "" . $r['count'] . "

💬 Top 10 Interactores del Chat

"; foreach ($top_chatters as $i => $c) { $emoji = ($i === 0) ? "👑 " : "💬 "; $reward_html = ""; if (isset($rewarded_users[$c['username']])) { $reward_html = "+{$rewarded_users[$c['username']]} Fan Points"; } $html_content .= ""; } $html_content .= "
#UsuarioMensajesRecompensa
" . ($i + 1) . "$emoji" . htmlspecialchars($c['username']) . "" . $c['count'] . "$reward_html

🎵 Top Canciones (Más Pedidas)

"; foreach ($top_songs_requested as $s) { $html_content .= ""; } $html_content .= "
CanciónArtistaVeces
" . htmlspecialchars($s['song']) . "" . htmlspecialchars($s['artist']) . "" . $s['count'] . "

⭐ Top Canciones (Más Likes)

"; foreach ($top_songs_liked as $s) { $html_content .= ""; } $html_content .= "
CanciónLikes
" . htmlspecialchars($s['song_title']) . " " . $s['likes_count'] . "
"; $subject = "📊 [AUTO] Reporte Semanal - Lili Records Radio ($report_date)"; $res = MailService::sendMail(null, $subject, $html_content); if (!empty($res['success'])) { echo "Report sent successfully.\n"; // Log the run $stmt = $db->prepare("INSERT INTO automation_logs (task_name, last_run) VALUES (?, NOW()) ON DUPLICATE KEY UPDATE last_run = NOW()"); $stmt->execute([$task_name]); } else { echo "Failed to send report: " . ($res['error'] ?? 'Unknown error') . "\n"; }