"use client"; import { useState, useCallback } from "react"; import { useQueryClient } from "@tanstack/react-query"; export function useChannelPasswords(channelId?: string) { const queryClient = useQueryClient(); const [channelPasswords, setChannelPasswords] = useState>(() => { try { return JSON.parse(localStorage.getItem("channel_passwords") ?? "{}"); } catch { return {}; } }); const [blockPasswords, setBlockPasswords] = useState>(() => { try { return JSON.parse(localStorage.getItem("block_passwords") ?? "{}"); } catch { return {}; } }); const [showChannelPasswordModal, setShowChannelPasswordModal] = useState(false); const [showBlockPasswordModal, setShowBlockPasswordModal] = useState(false); // channelPassword only depends on channelId — available immediately from localStorage const channelPassword = channelId ? channelPasswords[channelId] : undefined; // blockPassword is derived lazily by the caller (needs broadcast.slot.id) const getBlockPassword = useCallback( (slotId?: string) => (slotId ? blockPasswords[slotId] : undefined), [blockPasswords], ); const submitChannelPassword = useCallback( (password: string) => { if (!channelId) return; const next = { ...channelPasswords, [channelId]: password }; setChannelPasswords(next); try { localStorage.setItem("channel_passwords", JSON.stringify(next)); } catch {} setShowChannelPasswordModal(false); queryClient.invalidateQueries({ queryKey: ["broadcast", channelId] }); }, [channelId, channelPasswords, queryClient], ); const submitBlockPassword = useCallback( (slotId: string, channelIdForQuery: string | undefined, password: string) => { const next = { ...blockPasswords, [slotId]: password }; setBlockPasswords(next); try { localStorage.setItem("block_passwords", JSON.stringify(next)); } catch {} setShowBlockPasswordModal(false); queryClient.invalidateQueries({ queryKey: ["stream-url", channelIdForQuery, slotId], }); }, [blockPasswords, queryClient], ); return { channelPassword, getBlockPassword, showChannelPasswordModal, setShowChannelPasswordModal, showBlockPasswordModal, setShowBlockPasswordModal, submitChannelPassword, submitBlockPassword, }; }