import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { Card, Button, Typography, Space, Spin, message, Tooltip as AntTooltip } from 'antd'; import { PlayCircleOutlined, ReloadOutlined, HistoryOutlined, InfoCircleOutlined, CustomerServiceOutlined } from '@ant-design/icons'; import Tooltip from './Tooltip'; import TrackList from './TrackList'; const { Title, Text, Paragraph } = Typography; const PlaylistsSection = () => { const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState({ sixHour: false, daily: false }); const [playlists, setPlaylists] = useState(null); const fetchPlaylists = async () => { try { const response = await axios.get('/api/playlists'); setPlaylists(response.data); } catch (error) { console.error('Failed to fetch playlists:', error); message.error('Failed to load playlist metadata'); } finally { setLoading(false); } }; useEffect(() => { fetchPlaylists(); }, []); const handleRefresh = async (type) => { const isSixHour = type === 'six-hour'; setRefreshing(prev => ({ ...prev, [isSixHour ? 'sixHour' : 'daily']: true })); try { const endpoint = isSixHour ? '/api/playlists/refresh/six-hour' : '/api/playlists/refresh/daily'; await axios.post(endpoint); message.success(`${isSixHour ? '6-Hour' : 'Daily'} playlist refreshed!`); await fetchPlaylists(); } catch (error) { console.error(`Refresh failed for ${type}:`, error); message.error(`Failed to refresh ${type} playlist`); } finally { setRefreshing(prev => ({ ...prev, [isSixHour ? 'sixHour' : 'daily']: false })); } }; if (loading) return
; return (
<CustomerServiceOutlined className="mr-2 text-blue-400" /> AI Curated Playlists
{/* 6-Hour Playlist */} Short & Sweet (6h)} extra={
{/* Daily Playlist */} Proof of Commitment (24h)} extra={ ); }; export default PlaylistsSection;