import { useEffect, useState, useCallback } from 'react'; import { videoApi } from '../lib/api'; import styles from './AnnouncementModal.module.css'; interface Props { /** If true, force show even if already read (for manual open) */ forceOpen?: boolean; onClose?: () => void; } export function AnnouncementModal({ forceOpen, onClose }: Props) { const [content, setContent] = useState(''); const [visible, setVisible] = useState(false); useEffect(() => { videoApi.getAnnouncement().then(({ data }) => { if (data.enabled && data.announcement) { setContent(data.announcement); if (forceOpen || !data.is_read) { setVisible(true); } } }).catch(() => {}); }, [forceOpen]); const handleClose = useCallback(() => { videoApi.readAnnouncement().catch(() => {}); setVisible(false); onClose?.(); }, [onClose]); if (!visible || !content) return null; return (