import React, { useEffect, useState } from "react"; import Card from "../../../components/ui/Card"; import { useSocket } from "../../../hooks/useSocket"; import playerManager from "../../../services/PlayerManager"; import "./styles/DashboardTab.css"; const DashboardTab = () => { const { socket, isConnected } = useSocket(); const [playerData, setPlayerData] = useState(null); const [earnedPopup, setEarnedPopup] = useState(false); const [credits, setCredits] = useState(0); const [onlineCount, setOnlineCount] = useState( playerManager.onlinePlayers.length, ); const savedUser = JSON.parse(localStorage.getItem("user")); const localUsername = savedUser?.username || "Unknown Pilot"; useEffect(() => { const unsubscribe = playerManager.subscribe(({ online }) => { setOnlineCount(online.length); }); if (!socket) return; socket.emit("player:get_dashboard"); const handleData = (data) => { setPlayerData(data); setCredits(data.credits); }; const handleCreditsUpdate = ({ totalCredits }) => { setCredits(totalCredits); setEarnedPopup(true); setTimeout(() => setEarnedPopup(false), 2000); }; const handleOfflineReport = () => { socket.emit("player:get_dashboard"); }; socket.on("player:dashboard_data", handleData); socket.on("player:credits_update", handleCreditsUpdate); socket.on("player:offline_report", handleOfflineReport); return () => { unsubscribe(); socket.off("player:dashboard_data", handleData); socket.off("player:credits_update", handleCreditsUpdate); socket.off("player:offline_report", handleOfflineReport); }; }, [socket]); const stats = playerData || { experience: 0, level: 1 }; const nextLevelExp = 1000; const expProgress = Math.min((stats.experience / nextLevelExp) * 100, 100); return (
ID_RECOGNITION
{stats.level}

{localUsername}

RANK: VETERAN

EXP: {stats.experience} NEXT: {nextLevelExp}
FINANCIAL_DATA

VALUABLES

CREDITS {credits.toLocaleString()} {earnedPopup && +1}
DATA_CORES {Math.floor(stats.experience / 10)}
SYSTEM_DIAGNOSTICS

SHIPS_LOG

ENGINE OPTIMAL
SHIELDS 100%
CARGO NEAR_FULL
NET {isConnected ? ( LIVE: {onlineCount} ) : ( "DISCONNECTED" )}
); }; export default DashboardTab;