/* global React, Icon */ const { useState: useC, useEffect: useCE, useRef: useCR } = React; function ChatWidget() { const [open, setOpen] = useC(typeof location !== "undefined" && new URLSearchParams(location.search).get("chat") === "1"); const [seen, setSeen] = useC(false); const [msgs, setMsgs] = useC([]); const [inputMode, setInputMode] = useC(null); // 'name' | 'phone' | 'question' const [draft, setDraft] = useC(""); const data = useCR({ treatment: "", name: "", phone: "" }); const bodyRef = useCR(null); const TRT = window.TREATMENTS || {}; const order = window.TREATMENT_ORDER || []; const pushBot = (m) => setMsgs((x) => [...x, { from: "bot", ...m }]); const pushUser = (text) => setMsgs((x) => [...x, { from: "user", text }]); useCE(() => { if (open && msgs.length === 0) { setTimeout(() => pushBot({ text: "Olá! Sou o assistente da Thays Fernandes. Como posso te ajudar hoje?", chips: [ { label: "Quero agendar", action: "agendar" }, { label: "Tirar uma dúvida", action: "duvida" }, { label: "Ver tratamentos", action: "tratamentos" }, ], }), 280); } }, [open]); useCE(() => { if (bodyRef.current) bodyRef.current.scrollTop = bodyRef.current.scrollHeight; }, [msgs, inputMode]); function handle(action, value, label) { if (action === "agendar") { pushUser("Quero agendar"); setTimeout(() => pushBot({ text: "Perfeito! Qual tratamento te interessa?", chips: [ ...order.map((k) => ({ label: TRT[k].title, action: "pick", value: k })), { label: "Ainda não sei", action: "pick", value: "" }, ], }), 260); } else if (action === "pick") { data.current.treatment = value ? TRT[value].title : "Ainda não sei"; pushUser(data.current.treatment); setTimeout(() => { pushBot({ text: "Ótimo. Como é o seu nome?" }); setInputMode("name"); }, 260); } else if (action === "duvida") { pushUser("Tirar uma dúvida"); setTimeout(() => pushBot({ text: "Claro! Escolha um tema ou escreva sua pergunta:", chips: [ { label: "Onde fica o atendimento?", action: "faq", value: "onde" }, { label: "Como funciona a avaliação?", action: "faq", value: "aval" }, { label: "Qual o horário?", action: "faq", value: "horario" }, { label: "Outra dúvida", action: "outra" }, ], }), 260); } else if (action === "faq") { const ans = { onde: "O atendimento é na Clínica Med Clin — R. Padre João Moreira, 80, Centro, Serro/MG.", aval: "Na avaliação tricológica analisamos couro cabeludo e fios por imagem para identificar a causa e montar um protocolo personalizado. Dura cerca de 60 minutos.", horario: "Atendemos de segunda a sábado, das 9h às 19h.", }[value]; pushUser(label); setTimeout(() => pushBot({ text: ans, chips: [{ label: "Quero agendar", action: "agendar" }, { label: "Falar no WhatsApp", action: "wa" }], }), 260); } else if (action === "outra") { pushUser("Outra dúvida"); setTimeout(() => { pushBot({ text: "Pode escrever sua pergunta que eu encaminho para a Thays." }); setInputMode("question"); }, 260); } else if (action === "tratamentos") { pushUser("Ver tratamentos"); setTimeout(() => pushBot({ text: "Estes são os tratamentos da Thays:", links: order.map((k) => ({ label: TRT[k].title, href: "tratamento.html?id=" + k })), chips: [{ label: "Quero agendar", action: "agendar" }], }), 260); } else if (action === "wa") { window.open(window.tfWa("Olá, Thays! Vim pelo site e gostaria de tirar uma dúvida."), "_blank"); } else if (action === "restart") { data.current = { treatment: "", name: "", phone: "" }; setMsgs([]); setInputMode(null); setTimeout(() => pushBot({ text: "Vamos começar de novo. Como posso ajudar?", chips: [ { label: "Quero agendar", action: "agendar" }, { label: "Tirar uma dúvida", action: "duvida" }, { label: "Ver tratamentos", action: "tratamentos" }, ], }), 200); } } function submitInput(e) { e.preventDefault(); const field = e.target.querySelector("input"); const v = (field ? field.value : draft).trim(); if (!v) return; pushUser(v); setDraft(""); if (inputMode === "name") { data.current.name = v; setInputMode(null); setTimeout(() => { pushBot({ text: "E qual o seu WhatsApp para confirmarmos?" }); setInputMode("phone"); }, 240); } else if (inputMode === "phone") { data.current.phone = v; setInputMode(null); const d = data.current; const wamsg = `Olá, Thays! Vim pelo site. Tenho interesse em: ${d.treatment}. Meu nome é ${d.name} e meu WhatsApp é ${d.phone}. Gostaria de agendar uma avaliação.`; setTimeout(() => pushBot({ text: `Obrigada, ${d.name}! Resumo do seu pedido:`, summary: { treatment: d.treatment, name: d.name, phone: d.phone }, cta: { label: "Enviar para a Thays", href: window.tfWa(wamsg) }, note: "Toque para enviar pelo WhatsApp. A Thays responde em até 24h.", chips: [{ label: "Recomeçar", action: "restart" }], }), 260); } else if (inputMode === "question") { setInputMode(null); const wamsg = `Olá, Thays! Vim pelo site e tenho uma dúvida: ${v}`; setTimeout(() => pushBot({ text: "Anotado! Posso encaminhar sua dúvida diretamente para a Thays:", cta: { label: "Enviar dúvida no WhatsApp", href: window.tfWa(wamsg) }, chips: [{ label: "Quero agendar", action: "agendar" }, { label: "Recomeçar", action: "restart" }], }), 260); } } return (
}