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")}
)}
); }