95 lines
3.3 KiB
PHP
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()]);
|
|
}
|