import { useEffect, useState, useCallback } from "react"; interface ChartInfo { title: string; artist: string; notes?: number; game?: string; difficulties: DifficultyInfo[]; } interface DifficultyInfo { difficulty: string; level?: number; } interface SongInfoDisplayProps { scores?: Record[]; } const SongInfoDisplay = ({ scores = [], }: SongInfoDisplayProps) => { const [chartInfo, setChartInfo] = useState(null); const extractInfoFromScores = useCallback(() => { if (scores.length === 0) { setChartInfo(null); return; } const firstScore = scores[0]; const title = firstScore.title as string || "Unknown Title"; const artist = firstScore.artist as string || "Unknown Artist"; const notes = firstScore.notes as number; const game = firstScore.game as string; const difficultyMap = new Map(); scores.forEach(score => { if (score.difficulty !== undefined) { const diffKey = (score.diff_lamp as string) || (score.difficulty as string).toString(); if (!difficultyMap.has(diffKey)) { const level = score.diff_lamp ? (score.difficulty as number) : (score.level as number); difficultyMap.set(diffKey, { difficulty: diffKey, level: level, }); } } }); const difficulties = Array.from(difficultyMap.values()).sort((a, b) => { if (a.level !== undefined && b.level !== undefined) { return a.level - b.level; } return a.difficulty.localeCompare(b.difficulty); }); setChartInfo({ title, artist, notes, game, difficulties }); }, [scores]); useEffect(() => { extractInfoFromScores(); }, [extractInfoFromScores]); if (!chartInfo) return null; return (
{/* Left - Song Details */}
{chartInfo.game && (
{chartInfo.game}
)}

{chartInfo.title}

{chartInfo.artist}

{chartInfo.notes && (
Notes {chartInfo.notes}
)}
{/* Right - Charts */}

Known Difficulties

{chartInfo.difficulties.map((diff, index) => (
{diff.difficulty.toUpperCase()} {diff.level !== undefined && ` ${diff.level}`}
))}
); }; export default SongInfoDisplay;