import useSWR from 'swr'
import fetcher from '@/lib/fetcher'
import Image from 'next/future/image'
import Link from 'next/link'
import clsx from 'clsx'
import {useEffect} from 'react'
import {animate} from 'motion'
function AnimatedBars() {
useEffect(() => {
animate(
'#bar1',
{
transform: [
'scaleY(1.0) translateY(0rem)',
'scaleY(1.5) translateY(-0.082rem)',
'scaleY(1.0) translateY(0rem)'
]
},
{
duration: 1.0,
repeat: Infinity,
easing: ['ease-in-out']
}
);
animate(
'#bar2',
{
transform: [
'scaleY(1.0) translateY(0rem)',
'scaleY(3) translateY(-0.083rem)',
'scaleY(1.0) translateY(0rem)'
]
},
{
delay: 0.2,
duration: 1.5,
repeat: Infinity,
easing: ['ease-in-out']
}
);
animate(
'#bar3',
{
transform: [
'scaleY(1.0) translateY(0rem)',
'scaleY(0.5) translateY(0.37rem)',
'scaleY(1.0) translateY(0rem)'
]
},
{
delay: 0.3,
duration: 1.5,
repeat: Infinity,
easing: ['ease-in-out']
}
);
}, [])
return (
)
}
function usePlayerState(path, options) {
const {data, error, isLoading} = useSWR(`/api/spotify/${path}`, fetcher, options)
return {
song: data,
isLoading,
isError: error
}
}
function Song({as: Component = 'div', artist, title, songUrl, album, albumImageUrl, isPlaying}) {
return (
{isPlaying &&
}
)
}
Song.Album = function SongAlbum({album, albumImageUrl}) {
return (
)
}
Song.Title = function SongTitle({as: Component = 'h2', title, songUrl, className}) {
return (
{title}
)
}
Song.Artist = function SongArtist({as: Component = 'p', artist}) {
return (
{artist}
)
}
Song.Skeleton = function SongSkeleton({as: Component = 'div'}) {
return (
)
}
function LastPlayed() {
const {song, isLoading, isError} = usePlayerState('last-played')
if (isError) return
return (
<>
{isLoading
?
: song?.title &&
}
>
)
}
export function SpotifyPlayer() {
const {song, isLoading, isError} = usePlayerState('currently-playing', {refreshInterval: 30000})
if (isError) return
return (
{isLoading
?
: song?.isPlaying
?
:
}
)
}