import Link from 'next/link'; import Image from 'next/image'; import { createTrack, deleteTrack, toggleTrack } from '@/actions/admin-radio-autodj'; import { StatusCard } from '@/components/admin/dashboard'; import { prisma } from '@/lib/prisma'; import { Disc3 } from 'lucide-react'; import { getTranslations } from "next-intl/server"; 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; }; function formatDuration(seconds: number | null): string { if (seconds == null || seconds < 0) return '\u2014'; 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', ' ') : '\u2014'; } export default async function AdminRadioAutoDjPage() { const t = await getTranslations("pages.admin.radio"); 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 (

{t("autoDjForm.title")}

{t("autoDjForm.subtitle")}

{dbError ? (

{t("autoDjForm.dbError")}

) : (
0 ? 'ok' : 'neutral'} icon="\u{25B6}\uFE0F" /> 0 ? 'warn' : 'neutral'} icon="\u{23F8}\uFE0F" />
)}

{t("autoDjForm.addTrack")}

{t("autoDjForm.playlist", { count: tracks.length })}

{tracks.length === 0 ? (
{t("autoDjForm.noTracks")}
) : (
{tracks.map((track) => ( ))}
{t("autoDjForm.colOrder")} {t("autoDjForm.colTitle")} {t("autoDjForm.colArtist")} {t("autoDjForm.colAlbum")} {t("autoDjForm.colDuration")} {t("autoDjForm.colPlays")} {t("autoDjForm.colLastPlayed")} {t("autoDjForm.colStatus")} {t("autoDjForm.colActions")}
{track.sortOrder} {track.artworkUrl ? ( ) : null} {track.title} {track.artist ?? '\u2014'} {track.album ?? '\u2014'} {formatDuration(track.duration)} {track.playCount} {formatDate(track.lastPlayedAt)} {track.isActive ? t("autoDjForm.activeLabel") : t("autoDjForm.inactiveLabel")}
)}
); }