import { useCallback, useEffect } from 'react';
import { CloudHeader } from '../components/CloudHeader';
import { FullscreenButton } from '../components/FullscreenButton';
import { QRPanel } from '../components/QRPanel';
import { WordCloudCanvas } from '../components/WordCloudCanvas';
import { CloudLoadingState } from '../components/CloudLoadingState';
import { CloudUnavailableState } from '../components/CloudUnavailableState';
import { useFocusQueue } from '../hooks/useFocusQueue';
import { useCloud } from '../hooks/useCloud';
import { useWordCloudChannel } from '../hooks/useWordCloudChannel';
import { useWordCloudFocus } from '../hooks/useWordCloudFocus';
import { TitleFrost } from '../components/TitleFrost';
import type { FocusEvent } from '../types/channel';
import styles from './PublicDisplayPage.module.css';
interface PublicDisplayPageProps {
productId: string;
}
export function PublicDisplayPage({ productId }: PublicDisplayPageProps) {
const cloudState = useCloud(productId);
const cloud = cloudState.cloud;
const queue = useFocusQueue();
const focus = useWordCloudFocus({
words: cloud?.words ?? [],
autoReturn: true,
onComplete: queue.advance,
});
const receiveMessage = useCallback(
(message: FocusEvent) => {
queue.enqueue(message);
},
[queue],
);
useWordCloudChannel(productId, receiveMessage);
useEffect(() => {
if (!queue.current || focus.phase !== 'idle' || !cloud) {
return;
}
const found = focus.focusName(queue.current.name, queue.current.targetIndex ?? 0);
if (!found) {
queue.advance();
}
}, [cloud, focus, queue]);
if (cloudState.status === 'loading') {
return ;
}
if (!cloud) {
return ;
}
return (
{cloud.caption}
);
}