/**
 * Shared "reauth required" flag for the admin SPA. The api layer flips it when a
 * call returns REAUTH_REQUIRED; the app-level banner subscribes, so the notice
 * surfaces mid-session on whatever tab the merchant is on.
 */
type Listener = (required: boolean) => void;

let reauthRequired = false;
const listeners = new Set<Listener>();

export function getReauthRequired(): boolean {
	return reauthRequired;
}

export function setReauthRequired(required: boolean): void {
	if (required === reauthRequired) {
		return;
	}
	reauthRequired = required;
	for (const listener of listeners) {
		listener(reauthRequired);
	}
}

export function subscribeReauth(listener: Listener): () => void {
	listeners.add(listener);
	return () => {
		listeners.delete(listener);
	};
}
