import { Users, Play, Trash2, Radio, Loader2, Share2, Copy, Link } from 'lucide-react';
import { useNavigate } from 'react-router-dom';
import { useState, useEffect, useRef } from 'react';
import api from '../services/api';
import { useLanguage } from '../contexts/LanguageContext';
import toast from 'react-hot-toast';
export default function RoomCard({ room, onDelete }) {
const navigate = useNavigate();
const { t } = useLanguage();
const [status, setStatus] = useState({ running: false, participantCount: 0 });
const [starting, setStarting] = useState(false);
const [showCopyMenu, setShowCopyMenu] = useState(false);
const copyMenuRef = useRef(null);
useEffect(() => {
const handleClickOutside = (e) => {
if (copyMenuRef.current && !copyMenuRef.current.contains(e.target)) {
setShowCopyMenu(false);
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => document.removeEventListener('mousedown', handleClickOutside);
}, []);
const copyToClipboard = (url) => {
navigator.clipboard.writeText(url);
toast.success(t('room.linkCopied'));
setShowCopyMenu(false);
};
useEffect(() => {
const checkStatus = async () => {
try {
const res = await api.get(`/rooms/${room.uid}/status`);
setStatus(res.data);
} catch {
// Ignore errors
}
};
checkStatus();
const interval = setInterval(checkStatus, 15000);
return () => clearInterval(interval);
}, [room.uid]);
return (
navigate(`/rooms/${room.uid}`)}>
{room.name}
{status.running && (
{t('common.live')}
)}
{room.shared ? (
{t('room.shared')}
) : null}
{room.shared ? room.owner_name : `${room.uid.substring(0, 8)}...`}
{/* Room info */}
{status.running ? t('room.participants', { count: status.participantCount }) : t('common.offline')}
{room.max_participants > 0 && (
Max: {room.max_participants}
)}
{room.access_code && (
{t('common.protected')}
)}
{/* Actions */}
e.stopPropagation()}>
{showCopyMenu && (
)}
{onDelete && !room.shared && (
)}
);
}