import { useState } from "react" import { FormattedMessage } from "react-intl" import type { NostrStreamProvider } from "@/providers" import { DefaultButton } from "@/element/buttons" import Spinner from "@/element/spinner" interface NwcConfigProps { provider: NostrStreamProvider hasNwc?: boolean onConfigured?: () => void } export default function NwcConfig({ provider, hasNwc, onConfigured }: NwcConfigProps) { const [nwcUri, setNwcUri] = useState("") const [status, setStatus] = useState<"idle" | "configuring" | "success" | "error" | "removing">("idle") const [error, setError] = useState() async function configureNwc() { if (!nwcUri.trim() || !provider.configureNwc) return setStatus("configuring") setError(undefined) try { await provider.configureNwc(nwcUri.trim()) setStatus("success") setNwcUri("") onConfigured?.() } catch (err) { console.error("Failed to configure NWC:", err) setError(err instanceof Error ? err.message : "Failed to configure NWC") setStatus("error") } } async function removeNwc() { if (!provider.removeNwc) return setStatus("removing") setError(undefined) try { await provider.removeNwc() setStatus("success") onConfigured?.() } catch (err) { console.error("Failed to remove NWC:", err) setError(err instanceof Error ? err.message : "Failed to remove NWC") setStatus("error") } } const isValidNwcUri = nwcUri.trim().startsWith("nostr+walletconnect://") function renderConfiguredState() { return (
{status === "removing" && ( <> )} {status !== "removing" && }
) } function renderConfigurationState() { return (

setNwcUri(e.target.value)} className="bg-layer-2 rounded-xl px-3 py-2 w-full" disabled={status === "configuring"} /> {!isValidNwcUri && nwcUri.trim() && ( )}
{status === "configuring" && ( <> )} {status !== "configuring" && }
) } return (

{hasNwc ? renderConfiguredState() : renderConfigurationState()} {status === "success" && (
{hasNwc ? ( ) : ( )}
)} {status === "error" && error && (
)}
) }