"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; interface MasterOwnerProfile { name: string; } export function MasterOwnerForm() { const router = useRouter(); const [name, setName] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [existingOwner, setExistingOwner] = useState(null); const [existingOwnerUri, setExistingOwnerUri] = useState(null); const [isLoadingOwner, setIsLoadingOwner] = useState(true); const [isEditing, setIsEditing] = useState(false); const [showDeleteModal, setShowDeleteModal] = useState(false); async function handleDelete() { if (!existingOwnerUri) { setError("Missing master owner URI"); return; } setLoading(true); setError(null); try { const res = await fetch("/api/master-owner", { method: "DELETE", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ uri: existingOwnerUri }), }); if (!res.ok) { const data = await res.json(); throw new Error(data.error || "Failed to delete master owner"); } setExistingOwner(null); setExistingOwnerUri(null); setIsEditing(false); setShowDeleteModal(false); setName(""); router.refresh(); } catch (err) { console.error("Failed to delete master owner:", err); setError((err as Error).message || "Failed to delete master owner"); } finally { setLoading(false); } } // Fetch existing master owner profile on mount useEffect(() => { async function fetchOwner() { try { const res = await fetch("/api/master-owner"); if (!res.ok) { throw new Error("Failed to fetch master owner"); } const data = await res.json(); if (data.masterOwner) { setExistingOwner(data.masterOwner); setExistingOwnerUri(typeof data.uri === "string" ? data.uri : null); } } catch (err) { console.error("Failed to fetch master owner:", err); } finally { setIsLoadingOwner(false); } } fetchOwner(); }, []); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setLoading(true); setError(null); try { const method = isEditing ? "PUT" : "POST"; const res = await fetch("/api/master-owner", { method, headers: { "Content-Type": "application/json" }, body: JSON.stringify(isEditing ? { uri: existingOwnerUri, name } : { name }), }); if (!res.ok) { throw new Error("Failed to update master owner"); } const data = await res.json(); if (data.masterOwner) { setExistingOwner(data.masterOwner); setExistingOwnerUri(data.uri || existingOwnerUri); } setIsEditing(false); setName(""); router.refresh(); } catch (err) { console.error("Failed to update master owner:", err); setError((err as Error).message || "Failed to save master owner"); } finally { setLoading(false); } } // Show loading state while fetching owner if (isLoadingOwner) { return
Loading master owner profile...
; } // Show existing owner profile if (existingOwner && !isEditing) { return (

Master Owner Profile Found

A master owner owns the rights of the recording of a song. It is typically a record label and it generally assigns ISRC codes to recordings

Name: {existingOwner.name}

{error &&

{error}

} {showDeleteModal && (

Delete Master Owner?

This action cannot be undone.

)}
); } // Show form if no existing owner return (
setName(e.target.value)} className="w-full px-3 py-2 border border-zinc-300 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-800 text-zinc-900 dark:text-zinc-100" disabled={loading} />
{error &&

{error}

}
{isEditing && ( )}
); }