'use client'; import { useState, useEffect } from 'react'; import Image from 'next/image'; import { lastFmAPI } from '@/lib/lastfm-api'; import { Button } from '@/components/ui/button'; import { ScrollArea, ScrollBar } from '@/components/ui/scroll-area'; import Link from 'next/link'; interface SimilarArtist { name: string; url: string; image?: Array<{ '#text': string; size: string; }>; } interface SimilarArtistsProps { artistName: string; } export function SimilarArtists({ artistName }: SimilarArtistsProps) { const [similarArtists, setSimilarArtists] = useState([]); const [loading, setLoading] = useState(false); useEffect(() => { const fetchSimilarArtists = async () => { if (!lastFmAPI.isAvailable()) return; setLoading(true); try { const similar = await lastFmAPI.getSimilarArtists(artistName, 6); if (similar?.artist) { setSimilarArtists(similar.artist); } } catch (error) { console.error('Failed to fetch similar artists:', error); } finally { setLoading(false); } }; fetchSimilarArtists(); }, [artistName]); const getArtistImage = (artist: SimilarArtist): string => { if (!artist.image || artist.image.length === 0) { return '/default-user.jpg'; } // Try to get medium or large image const mediumImage = artist.image.find(img => img.size === 'medium' || img.size === 'large'); const anyImage = artist.image[artist.image.length - 1]; // Fallback to last image return mediumImage?.['#text'] || anyImage?.['#text'] || '/default-user.jpg'; }; if (!lastFmAPI.isAvailable() || loading || similarArtists.length === 0) { return null; } return (

Fans also like

{similarArtists.map((artist) => (
{artist.name}

{artist.name}

))}
); }