38428-vm/api/get_top_fans.php
2026-02-17 19:08:09 +00:00

95 lines
3.3 KiB
PHP

<?php
require_once __DIR__ . '/../db/config.php';
header('Content-Type: application/json');
try {
$pdo = db();
$username = $_GET['username'] ?? null;
// Get top fans from the fans table
$stmt = $pdo->query("SELECT name as username, points as total_likes, photo, is_fan_of_month FROM fans ORDER BY points DESC LIMIT 5");
$fans = $stmt->fetchAll(PDO::FETCH_ASSOC);
// If username provided and not in top 5, fetch it specifically
if ($username) {
$found = false;
foreach ($fans as $f) {
if (strtolower($f['username']) === strtolower($username)) {
$found = true;
break;
}
}
if (!$found) {
$stmt = $pdo->prepare("SELECT name as username, points as total_likes, photo, is_fan_of_month FROM fans WHERE name = ?");
$stmt->execute([$username]);
$userFan = $stmt->fetch(PDO::FETCH_ASSOC);
if ($userFan) {
$userFan['is_extra'] = true;
$fans[] = $userFan;
}
}
}
// Add level and progress logic
foreach ($fans as &$fan) {
$fan['badges'] = [];
$points = $fan['total_likes'];
// Level Calculation
if ($points >= 2500) {
$fan['level'] = 5;
$fan['level_name'] = 'Leyenda';
$fan['level_color'] = '#a855f7'; // Purple
$fan['next_level_points'] = 0;
$fan['level_progress'] = 100;
$fan['unlocked_emoji'] = '👑';
} elseif ($points >= 1000) {
$fan['level'] = 4;
$fan['level_name'] = 'Super Fan';
$fan['level_color'] = '#f97316'; // Orange
$fan['next_level_points'] = 2500;
$fan['level_progress'] = (($points - 1000) / (2500 - 1000)) * 100;
$fan['unlocked_emoji'] = '🔥';
} elseif ($points >= 500) {
$fan['level'] = 3;
$fan['level_name'] = 'Fan Leal';
$fan['level_color'] = '#22c55e'; // Green
$fan['next_level_points'] = 1000;
$fan['level_progress'] = (($points - 500) / (1000 - 500)) * 100;
$fan['unlocked_emoji'] = '⭐';
} elseif ($points >= 100) {
$fan['level'] = 2;
$fan['level_name'] = 'Oyente Frecuente';
$fan['level_color'] = '#3b82f6'; // Blue
$fan['next_level_points'] = 500;
$fan['level_progress'] = (($points - 100) / (500 - 100)) * 100;
$fan['unlocked_emoji'] = '';
} else {
$fan['level'] = 1;
$fan['level_name'] = 'Novato';
$fan['level_color'] = '#94a3b8'; // Slate
$fan['next_level_points'] = 100;
$fan['level_progress'] = ($points / 100) * 100;
$fan['unlocked_emoji'] = '';
}
if ($fan['is_fan_of_month']) {
$fan['badges'][] = ['icon' => 'bi-star-fill', 'color' => '#facc15', 'label' => 'Fan del Mes'];
}
if ($points >= 1000) {
$fan['badges'][] = ['icon' => 'bi-gem', 'color' => '#38bdf8', 'label' => 'Diamante'];
} elseif ($points >= 500) {
$fan['badges'][] = ['icon' => 'bi-shield-check', 'color' => '#00c853', 'label' => 'Veterano'];
}
// Custom color based on level
$fan['custom_color'] = $fan['level_color'];
if ($fan['is_fan_of_month']) $fan['custom_color'] = '#facc15';
}
echo json_encode(['success' => true, 'fans' => $fans]);
} catch (Exception $e) {
echo json_encode(['error' => $e->getMessage()]);
}