"use client"; import { useState } 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; function extractInitialApiKeys(data: Record | null): Record { const keys: Record = {}; if (data) { const comicvine = data.comicvine as Record | undefined; const googleBooks = data.google_books as Record | undefined; if (comicvine?.api_key) keys.comicvine = String(comicvine.api_key); if (googleBooks?.api_key) keys.google_books = String(googleBooks.api_key); } return keys; } export function MetadataProvidersCard({ handleUpdateSetting, initialData }: { handleUpdateSetting: (key: string, value: unknown) => Promise; initialData: Record | null }) { const { t } = useTranslation(); const [defaultProvider, setDefaultProvider] = useState(initialData?.default_provider ? String(initialData.default_provider) : "google_books"); const [metadataLanguage, setMetadataLanguage] = useState(initialData?.metadata_language ? String(initialData.metadata_language) : "en"); const [apiKeys, setApiKeys] = useState>(extractInitialApiKeys(initialData)); 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")}
); }