import Link from 'next/link'; import { createTrack, deleteTrack, toggleTrack } from '@/actions/admin-radio-autodj'; import { StatusCard } from '@/components/admin/dashboard'; import { prisma } from '@/lib/prisma'; export const dynamic = 'force-dynamic'; export const metadata = { title: 'Radio AutoDJ' }; type Track = { id: bigint; title: string; artist: string | null; album: string | null; artworkUrl: string | null; duration: number | null; playCount: number; lastPlayedAt: Date | null; isActive: boolean; sortOrder: number; }; /** Render an integer second count as m:ss, or an em dash when unset. */ function formatDuration(seconds: number | null): string { if (seconds == null || seconds < 0) return '—'; const m = Math.floor(seconds / 60); const s = seconds % 60; return `${m}:${String(s).padStart(2, '0')}`; } function formatDate(d: Date | null): string { return d ? d.toISOString().slice(0, 16).replace('T', ' ') : '—'; } export default async function AdminRadioAutoDjPage() { let tracks: Track[] = []; let dbError = false; try { tracks = await prisma.radioAutoDjPlaylist .findMany({ select: { id: true, title: true, artist: true, album: true, artworkUrl: true, duration: true, playCount: true, lastPlayedAt: true, isActive: true, sortOrder: true, }, orderBy: [{ sortOrder: 'asc' }, { title: 'asc' }], }) .catch(() => { dbError = true; return []; }); } catch { dbError = true; tracks = []; } const activeCount = tracks.filter((t) => t.isActive).length; const inactiveCount = tracks.length - activeCount; return (

Radio AutoDJ

Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.

{dbError ? (

Could not load the AutoDJ playlist (database unavailable).

) : (
0 ? 'ok' : 'neutral'} icon="▶️" /> 0 ? 'warn' : 'neutral'} icon="⏸️" />
)}

Add track

Playlist ({tracks.length})

{tracks.length === 0 ? (

No AutoDJ tracks yet — add one above.

) : (
{tracks.map((t) => ( ))}
Order Title Artist Album Duration Plays Last played Status Actions
{t.sortOrder} {t.artworkUrl ? ( ) : null} {t.title} {t.artist ?? '—'} {t.album ?? '—'} {formatDuration(t.duration)} {t.playCount} {formatDate(t.lastPlayedAt)} {t.isActive ? 'active' : 'inactive'}
)}
); }