import React, { useState, useEffect } from 'react'; import { Monitor, Plus, Copy, Download, CheckCircle2, Loader2, Wifi, WifiOff, RefreshCw, Tag } from 'lucide-react'; import { HybridBackend } from '../services/backend.ts'; import { PageHeader } from '../components/PageHeader.tsx'; import { useToast } from '../contexts/ToastContext.tsx'; export const RxConfigView: React.FC = () => { const workspace = HybridBackend.getActiveWorkspace(); const clinicaId = workspace?.id; const { addToast } = useToast(); const [devices, setDevices] = useState([]); const [loadingDevices, setLoadingDevices] = useState(true); const [newPcName, setNewPcName] = useState(''); const [creating, setCreating] = useState(false); const [newToken, setNewToken] = useState<{ token: string; pcName: string } | null>(null); const [copied, setCopied] = useState(false); const [rxVersion, setRxVersion] = useState<{ server: string; client: string; client_url: string } | null>(null); const fetchDevices = async () => { if (!clinicaId) return; setLoadingDevices(true); const list = await HybridBackend.getRxDevices(clinicaId); setDevices(list); setLoadingDevices(false); }; const fetchRxVersion = async () => { const cfg = await HybridBackend.getRxConfig(clinicaId!); if (!cfg?.rx_url) return; try { const res = await fetch(`${cfg.rx_url}/api/version`); if (res.ok) setRxVersion(await res.json()); } catch (_) {} }; useEffect(() => { fetchDevices(); if (clinicaId) fetchRxVersion(); }, [clinicaId]); const handleCreate = async (e: React.FormEvent) => { e.preventDefault(); if (!newPcName.trim() || !clinicaId) return; setCreating(true); const result = await HybridBackend.createRxDevice(clinicaId, newPcName.trim()); setCreating(false); if (!result.success) { addToast(result.message || 'Erro ao criar dispositivo.', 'error'); return; } setNewToken({ token: result.machine_token!, pcName: newPcName.trim() }); setNewPcName(''); fetchDevices(); }; const copyToken = (token: string) => { navigator.clipboard.writeText(token).then(() => { setCopied(true); addToast('Token copiado!', 'success'); setTimeout(() => setCopied(false), 2000); }); }; return (
{/* Token gerado */} {newToken && (

PC "{newToken.pcName}" CADASTRADO!

Cole este token no client Windows ao configurar. Ele só aparece uma vez.

{newToken.token}
)} {/* Download client */}

PC-RX CLIENT WINDOWS

{rxVersion?.client && ( v{rxVersion.client} )}

Instale no computador do consultório. Use o token gerado para configurar.

{rxVersion?.server && (

Servidor RX v{rxVersion.server}

)}
BAIXAR{rxVersion?.client ? ` v${rxVersion.client}` : ' CLIENT'}
{/* Adicionar novo PC */}

ADICIONAR PC

setNewPcName(e.target.value)} placeholder="Nome do PC (ex: CONSULTÓRIO 1)" className="flex-1 px-4 py-2 border border-gray-300 rounded-lg text-sm font-medium focus:ring-2 focus:ring-blue-500 outline-none uppercase" />
{/* Lista de dispositivos */}

PCS CADASTRADOS ({devices.length})

{loadingDevices ? (
) : devices.length === 0 ? (

Nenhum PC cadastrado ainda

) : (
{devices.map((d: any) => (
{d.is_active ? : }

{d.pc_name}

{d.last_ip ? `Último acesso: ${d.last_ip}` : 'Nunca conectou'} · {d.is_active ? 'ATIVO' : 'INATIVO'}

{d.is_active ? 'ATIVO' : 'INATIVO'}
))}
)}
); };