"use client"; import { useState, useEffect } from "react"; import { Card, CardHeader, CardTitle, CardDescription, CardContent, FormField, FormInput, FormSelect, Icon } from "@/app/components/ui"; import { ProviderIcon } from "@/app/components/ProviderIcon"; import { useTranslation } from "@/lib/i18n/context"; export const METADATA_LANGUAGES = [ { value: "en", label: "English" }, { value: "fr", label: "Français" }, { value: "es", label: "Español" }, ] as const; export function MetadataProvidersCard({ handleUpdateSetting }: { handleUpdateSetting: (key: string, value: unknown) => Promise }) { const { t } = useTranslation(); const [defaultProvider, setDefaultProvider] = useState("google_books"); const [metadataLanguage, setMetadataLanguage] = useState("en"); const [apiKeys, setApiKeys] = useState>({}); useEffect(() => { fetch("/api/settings/metadata_providers") .then((r) => (r.ok ? r.json() : null)) .then((data) => { if (data) { if (data.default_provider) setDefaultProvider(data.default_provider); if (data.metadata_language) setMetadataLanguage(data.metadata_language); if (data.comicvine?.api_key) setApiKeys((prev) => ({ ...prev, comicvine: data.comicvine.api_key })); if (data.google_books?.api_key) setApiKeys((prev) => ({ ...prev, google_books: data.google_books.api_key })); } }) .catch(() => {}); }, []); function save(provider: string, lang: string, keys: Record) { const value: Record = { default_provider: provider, metadata_language: lang, }; for (const [k, v] of Object.entries(keys)) { if (v) value[k] = { api_key: v }; } handleUpdateSetting("metadata_providers", value); } return ( {t("settings.metadataProviders")} {t("settings.metadataProvidersDesc")}
{/* Default provider */}
{([ { value: "google_books", label: "Google Books" }, { value: "open_library", label: "Open Library" }, { value: "comicvine", label: "ComicVine" }, { value: "anilist", label: "AniList" }, { value: "bedetheque", label: "Bédéthèque" }, ] as const).map((p) => ( ))}

{t("settings.defaultProviderHelp")}

{/* Metadata language */}
{METADATA_LANGUAGES.map((l) => ( ))}

{t("settings.metadataLanguageHelp")}

{/* Provider API keys — always visible */}

{t("settings.apiKeys")}

setApiKeys({ ...apiKeys, google_books: e.target.value })} onBlur={() => save(defaultProvider, metadataLanguage, apiKeys)} />

{t("settings.googleBooksHelp")}

setApiKeys({ ...apiKeys, comicvine: e.target.value })} onBlur={() => save(defaultProvider, metadataLanguage, apiKeys)} />

{t("settings.comicvineHelp")} comicvine.gamespot.com/api.

Open Library
,
AniList
{t("common.and")}
Bédéthèque
{t("settings.freeProviders")}
); }