import useLyric from '@/web/api/hooks/useLyric'
import usePlaylist from '@/web/api/hooks/usePlaylist'
import useUserPlaylists from '@/web/api/hooks/useUserPlaylists'
import player from '@/web/states/player'
import { sample, chunk, sampleSize } from 'lodash-es'
import { css, cx } from '@emotion/css'
import { useState, useEffect, useMemo, useCallback, memo } from 'react'
import toast from 'react-hot-toast'
import { useNavigate } from 'react-router-dom'
import Icon from '@/web/components/Icon'
import { lyricParser } from '@/web/utils/lyric'
import Image from '@/web/components/Image'
import { resizeImage } from '@/web/utils/common'
import { breakpoint as bp } from '@/web/utils/const'
import useUser from '@/web/api/hooks/useUser'
import { useTranslation } from 'react-i18next'
import { motion } from 'framer-motion'
const Lyrics = ({ tracksIDs }: { tracksIDs: number[] }) => {
const { t } = useTranslation()
const [id, setId] = useState(0)
const { data: user } = useUser()
useEffect(() => {
if (id === 0) {
setId(sample(tracksIDs) || 0)
}
}, [id, tracksIDs])
const { data: lyric } = useLyric({ id })
const lyricLines = useMemo(() => {
if (!lyric?.lrc?.lyric) return []
const parsedLyrics = lyricParser(lyric)
const lines = parsedLyrics.lyric.map(line => line.content)
return sample(chunk(lines, 4)) ?? []
}, [lyric])
return (
{t('my.xxxs-liked-tracks', { nickname: user?.profile?.nickname })}
{lyricLines.map((line, index) => (
{line}
))}
)
}
const Covers = memo(({ tracks }: { tracks: Track[] }) => {
const navigate = useNavigate()
return (
{tracks.map(track => (
navigate(`/album/${track.al.id}`)}
/>
))}
)
})
Covers.displayName = 'Covers'
const PlayLikedSongsCard = () => {
const { t } = useTranslation()
const navigate = useNavigate()
const { data: playlists } = useUserPlaylists()
const { data: likedSongsPlaylist } = usePlaylist({
id: playlists?.playlist?.[0].id ?? 0,
})
const handlePlay = useCallback(
(e: React.MouseEvent) => {
e.stopPropagation()
player.playPlaylist(likedSongsPlaylist?.playlist.id)
},
[likedSongsPlaylist?.playlist.id]
)
const [sampledTracks, setSampledTracks] = useState