import React, { useState, useEffect, useCallback } from 'react'; import { UserSearch, Stethoscope, Wrench, Sparkles, MapPin, Search, Mail, Phone, RefreshCw, Save, BadgeCheck, Inbox, Send, CheckCircle2, XCircle, CircleDollarSign, UserCircle2, X, ChevronUp, Eraser, FileText, Plus, Pencil, Trash2, Tags, ChevronDown } from 'lucide-react'; const fmtBRLp = (v: number) => 'R$ ' + Number(v || 0).toLocaleString('pt-BR', { minimumFractionDigits: 2 }); // Fatia 2: solicitar prótese direto do marketplace → cria a OS (lab pré-selecionado). const SolicitarProteseModal: React.FC<{ prof: any; onClose: () => void }> = ({ prof, onClose }) => { const ws = HybridBackend.getActiveWorkspace(); const [produtos, setProdutos] = useState([]); const [dentistas, setDentistas] = useState([]); const [busca, setBusca] = useState(''); const [pacientes, setPacientes] = useState([]); const [paciente, setPaciente] = useState(null); const [form, setForm] = useState({ produto_id: '', tipo: '', dentista_id: '', dentes: '', prazo_entrega: '', observacoes: '' }); const [saving, setSaving] = useState(false); const [okMsg, setOkMsg] = useState(false); useEffect(() => { HybridBackend.getLaboratorioProdutos(prof.id).then(r => setProdutos(Array.isArray(r) ? r : [])).catch(() => setProdutos([])); HybridBackend.getDentistas(ws?.id).then(r => setDentistas(Array.isArray(r) ? r : [])).catch(() => setDentistas([])); }, [prof.id, ws?.id]); useEffect(() => { if (paciente) return; const t = setTimeout(() => { HybridBackend.getPacientes(busca).then(r => setPacientes(r.data || [])).catch(() => setPacientes([])); }, 250); return () => clearTimeout(t); }, [busca, paciente]); const set = (k: string, v: any) => setForm((f: any) => ({ ...f, [k]: v })); const salvar = async () => { if (!form.produto_id && !form.tipo.trim()) { alert('Escolha um produto do catálogo ou descreva o trabalho.'); return; } const dent = dentistas.find(d => d.id === form.dentista_id); setSaving(true); try { await HybridBackend.createProteseOS({ ...form, protetico_id: prof.id, valor: 0, paciente_id: paciente?.id || null, paciente_nome: paciente?.nome || null, dentista_nome: dent?.nome || null, }); setOkMsg(true); } catch (e: any) { alert((e.message || 'Erro').toUpperCase()); } finally { setSaving(false); } }; return (
e.stopPropagation()}>

Solicitar prótese

{okMsg ? (

OS enviada ao laboratório

{prof.nome} recebeu a solicitação. Acompanhe em Prótese / Bancada.

) : (
Laboratório: {prof.nome}
{produtos.length > 0 ? ( ) : ( set('tipo', e.target.value)} placeholder="Descreva o trabalho (sem catálogo)" className="w-full mt-1 px-3 py-2 rounded-xl border border-gray-200 text-sm" /> )}
{paciente ? (
{paciente.nome}
) : (
setBusca(e.target.value)} placeholder="Buscar paciente..." className="w-full pl-9 pr-3 py-2 rounded-xl border border-gray-200 text-sm" /> {busca && pacientes.length > 0 && (
{pacientes.slice(0, 8).map(p => )}
)}
)}
set('prazo_entrega', e.target.value)} className="w-full mt-1 px-3 py-2 rounded-xl border border-gray-200 text-sm" />
set('dentes', e.target.value)} placeholder="Ex.: 11, 21" className="w-full mt-1 px-3 py-2 rounded-xl border border-gray-200 text-sm" />