import React, { useState, useEffect } from 'react'; import { X, ChevronLeft, ChevronRight, Save, Mail, Calendar, Settings as GearIcon, CheckCircle2 } from 'lucide-react'; import { HybridBackend } from '../services/backend.ts'; import { Settings, Dentista } from '../types.ts'; import { useToast } from '../contexts/ToastContext.tsx'; import { GoogleConnectButton } from './GoogleConnectButton.tsx'; import { Link as LinkIcon, Copy, Share2 } from 'lucide-react'; interface AgendaSettingsModalProps { isOpen: boolean; onClose: () => void; dentists: Dentista[] | null; } export const AgendaSettingsModal: React.FC = ({ isOpen, onClose, dentists }) => { const [page, setPage] = useState(1); const [config, setConfig] = useState({ clinicEmail: '', clinicCalendarId: '', googleApiKey: '', googleCalendarIds: {} }); const [isSaving, setIsSaving] = useState(false); const [connectedAccounts, setConnectedAccounts] = useState([]); const toast = useToast(); const fetchGoogleStatus = async () => { try { const response = await fetch('http://localhost:3005/api/auth/google/status'); const data = await response.json(); setConnectedAccounts(data); } catch (error) { console.error("Erro ao buscar status do Google:", error); } }; useEffect(() => { if (isOpen) { const loadSettings = async () => { try { const settings = await HybridBackend.getSettings(); setConfig({ clinicEmail: settings.clinicEmail || '', clinicCalendarId: settings.clinicCalendarId || '', googleApiKey: settings.googleApiKey || '', googleCalendarIds: settings.googleCalendarIds || {} }); } catch (error) { console.error("Erro ao carregar configurações:", error); } }; loadSettings(); fetchGoogleStatus(); setPage(1); // Reset to first page } }, [isOpen]); const copyInviteLink = (dentistId: string) => { const url = `http://localhost:3005/api/auth/google/url?dentistId=${dentistId}`; navigator.clipboard.writeText(url); toast.success("LINK DE CONVITE COPIADO!"); }; const handleSave = async () => { setIsSaving(true); try { await HybridBackend.saveSettings(config); toast.success("CONFIGURAÇÕES SALVAS COM SUCESSO!"); onClose(); } catch (error) { toast.error("ERRO AO SALVAR CONFIGURAÇÕES."); } finally { setIsSaving(false); } }; if (!isOpen) return null; const totalPages = 3; return (
{/* Header */}

Configurações da Agenda

Integrações e Comunicação

{/* Progress Bar */}
{/* Content Area - Horizontal Slider Simulation */}
{/* Page 1: Clinic Emails */}

E-mails da Clínica

setConfig({ ...config, clinicEmail: e.target.value.toUpperCase() })} />

* Este e-mail será usado para alertas de sistema e envio de comprovantes.

{/* Page 2: Google Setup Tutorial & Central Config */}

Configuração Google Agenda

1. Ativar API
1
Google API Key
setConfig({ ...config, googleApiKey: e.target.value })} /> Criar Credenciais ➔
2
ID Agenda Clínica
setConfig({ ...config, clinicCalendarId: e.target.value })} /> Pegar ID nas Configs ➔

Guia de Integração

  • Crie um projeto no Google Cloud Console.
  • No menu 'Biblioteca', ative a Google Calendar API.
  • Pegue o ID da Agenda nas configurações (Integrar agenda). Abrir Configurações de Agenda ➔
  • No Google Agenda, torne a agenda Pública nas autorizações de acesso.
{/* Page 3: Google Calendar Mapping */}

Agendas dos Dentistas

Abrir Google Calendar

Nova Integração Inteligente (OAuth2)

Agora você pode conectar agendas sem precisar torná-las públicas ou usar API Keys.

{/* ADMIN / CLINIC CONNECTION */}

Sua Conta (Administrador)

a.owner_id === 'admin' || a.owner_id.includes('@'))} onStatusChange={fetchGoogleStatus} />

Contas dos Dentistas

{dentists?.length ? dentists.map((dentist) => { const isConnected = connectedAccounts.some(a => a.owner_id === dentist.id); return (
{dentist.nome}
{isConnected ? ( Conectado ) : ( Não Vinculado )}
{!isConnected && ( )}
{/* Legacy ID support remains for backward compatibility */}
setConfig({ ...config, googleCalendarIds: { ...config.googleCalendarIds, [dentist.id]: e.target.value } })} />
); }) : (

Nenhum dentista cadastrado.

)}
{/* Footer Navigation */}
{page > 1 && ( )}
{page < totalPages ? ( ) : ( )}
); };