"use client"; import { useState } from "react"; import { SettingsSection, SettingsRow, SettingsInput, SettingsToggle } from "../ui"; import { SystemSettings } from "../../types"; import { InlineStatus, StatusType } from "@/components/ui/InlineStatus"; interface AIServicesSectionProps { settings: SystemSettings; onUpdate: (updates: Partial) => void; onTest: (service: string) => Promise<{ success: boolean; version?: string; error?: string }>; isTesting: boolean; } export function AIServicesSection({ settings, onUpdate, onTest, isTesting }: AIServicesSectionProps) { const [fanartTestStatus, setFanartTestStatus] = useState("idle"); const [fanartTestMessage, setFanartTestMessage] = useState(""); const [lastfmTestStatus, setLastfmTestStatus] = useState("idle"); const [lastfmTestMessage, setLastfmTestMessage] = useState(""); const handleFanartTest = async () => { setFanartTestStatus("loading"); setFanartTestMessage("Testing..."); const result = await onTest("fanart"); if (result.success) { setFanartTestStatus("success"); setFanartTestMessage("Connected"); } else { setFanartTestStatus("error"); setFanartTestMessage(result.error || "Failed"); } }; const handleLastfmTest = async () => { setLastfmTestStatus("loading"); setLastfmTestMessage("Testing..."); const result = await onTest("lastfm"); if (result.success) { setLastfmTestStatus("success"); setLastfmTestMessage("Connected"); } else { setLastfmTestStatus("error"); setLastfmTestMessage(result.error || "Failed"); } }; return ( {/* Fanart.tv */} onUpdate({ fanartEnabled: checked })} /> {settings.fanartEnabled && ( <> onUpdate({ fanartApiKey: v })} placeholder="Enter Fanart.tv API key" className="w-64" />
setFanartTestStatus("idle")} />
)} {/* Last.fm */}

Last.fm is pre-configured with a default key. Add your own for higher rate limits.

onUpdate({ lastfmApiKey: v })} placeholder="Optional: Your Last.fm API key" className="w-64" /> {settings.lastfmApiKey && (
setLastfmTestStatus("idle")} />
)}
); }