import { useEffect, useState } from 'react'; import { supabase } from '@/integrations/supabase/client'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { toast } from '@/hooks/use-toast'; import { Puzzle, Webhook, MessageSquare, Calendar, Mail, Link as LinkIcon } from 'lucide-react'; interface IntegrationSettings { id?: string; integration_n8n_base_url: string; integration_whatsapp_number: string; integration_whatsapp_url: string; integration_google_calendar_id: string; integration_email_provider: string; integration_email_api_base_url: string; integration_privacy_url: string; integration_terms_url: string; } const emptySettings: IntegrationSettings = { integration_n8n_base_url: '', integration_whatsapp_number: '', integration_whatsapp_url: '', integration_google_calendar_id: '', integration_email_provider: 'smtp', integration_email_api_base_url: '', integration_privacy_url: '/privacy', integration_terms_url: '/terms', }; export function IntegrasiTab() { const [settings, setSettings] = useState(emptySettings); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); useEffect(() => { fetchSettings(); }, []); const fetchSettings = async () => { const { data, error } = await supabase .from('platform_settings') .select('*') .single(); if (data) { setSettings({ id: data.id, integration_n8n_base_url: data.integration_n8n_base_url || '', integration_whatsapp_number: data.integration_whatsapp_number || '', integration_whatsapp_url: data.integration_whatsapp_url || '', integration_google_calendar_id: data.integration_google_calendar_id || '', integration_email_provider: data.integration_email_provider || 'smtp', integration_email_api_base_url: data.integration_email_api_base_url || '', integration_privacy_url: data.integration_privacy_url || '/privacy', integration_terms_url: data.integration_terms_url || '/terms', }); } setLoading(false); }; const saveSettings = async () => { setSaving(true); const payload = { ...settings }; delete payload.id; if (settings.id) { const { error } = await supabase .from('platform_settings') .update(payload) .eq('id', settings.id); if (error) toast({ title: 'Error', description: error.message, variant: 'destructive' }); else toast({ title: 'Berhasil', description: 'Pengaturan integrasi disimpan' }); } else { const { data, error } = await supabase .from('platform_settings') .insert(payload) .select() .single(); if (error) toast({ title: 'Error', description: error.message, variant: 'destructive' }); else { setSettings({ ...settings, id: data.id }); toast({ title: 'Berhasil', description: 'Pengaturan integrasi disimpan' }); } } setSaving(false); }; if (loading) return
; return (
{/* n8n / Webhook */} n8n / Webhook Konfigurasi URL untuk integrasi otomatisasi
setSettings({ ...settings, integration_n8n_base_url: e.target.value })} placeholder="https://automation.domain.com" className="border-2" />

Digunakan sebagai target default untuk webhook lanjutan. webhook_url per template tetap harus URL lengkap.

{/* WhatsApp */} WhatsApp Nomor kontak untuk dukungan dan notifikasi
setSettings({ ...settings, integration_whatsapp_number: e.target.value })} placeholder="+62812xxxx" className="border-2" />

Ditampilkan di konfirmasi konsultasi

setSettings({ ...settings, integration_whatsapp_url: e.target.value })} placeholder="https://wa.me/62812..." className="border-2" />
{/* Google Calendar */} Google Calendar Untuk pembuatan event konsultasi otomatis
setSettings({ ...settings, integration_google_calendar_id: e.target.value })} placeholder="your-calendar@gmail.com" className="border-2" />

Backend/n8n akan menggunakan ID ini untuk membuat event

{/* Email Provider */} Provider Email (Opsional) Konfigurasi alternatif selain SMTP
setSettings({ ...settings, integration_email_api_base_url: e.target.value })} placeholder="https://api.resend.com" className="border-2" disabled={settings.integration_email_provider === 'smtp'} />
{/* Public Links */} Link Publik URL untuk halaman legal
setSettings({ ...settings, integration_privacy_url: e.target.value })} placeholder="/privacy" className="border-2" />
setSettings({ ...settings, integration_terms_url: e.target.value })} placeholder="/terms" className="border-2" />

Default: halaman internal. Bisa diganti dengan URL eksternal.

); }