import React, { useState } from 'react'; import { toast } from 'sonner'; import { ShieldBan, Cable, LayoutDashboard, ShieldCheck, History, FileText, MessagesSquare, BookOpen, Zap, ExternalLink } from 'lucide-react'; import { useUrlTabs } from './hooks/use-url-tabs'; import type { DashboardData } from './types'; import { SettingsLayout, FeatSection, FeatRow, SettingsHeader, FlatTabs, SecondaryButton } from './components/ui/settings-ui'; export default function Senders({ data: dashboardData }: { data: DashboardData }) { const t = React.useCallback((key: string, fallback: string = ''): string => { const val = (dashboardData?.i18n as Record)?.[key]; return typeof val === 'string' ? val : fallback; }, [dashboardData.i18n]); const translations = { labelPro: t('proVersion', 'PRO'), btnSettings: t('btnSettings', 'Settings'), btnUpgrade: t('btnUpgrade', 'Upgrade'), btnActivate: t('btnActivate', 'Activate'), }; const senderData = (dashboardData?.sendersData as { enabled: Record; allowed: Record; }) || { enabled: { email: 1, wa: 1, block: 1 }, allowed: { email: true, wa: true, block: true } }; const [enabled, setEnabled] = useState(senderData.enabled); const [features, setFeatures] = useState(dashboardData.features || {}); const [activeTab, setActiveTab] = useUrlTabs('overview'); const [prevEnabledProp, setPrevEnabledProp] = useState(senderData.enabled); if (senderData.enabled !== prevEnabledProp) { setPrevEnabledProp(senderData.enabled); if (JSON.stringify(senderData.enabled) !== JSON.stringify(prevEnabledProp)) { setEnabled(senderData.enabled); } } const [prevFeaturesProp, setPrevFeaturesProp] = useState(dashboardData.features); if (dashboardData.features !== prevFeaturesProp) { setPrevFeaturesProp(dashboardData.features); if (JSON.stringify(dashboardData.features) !== JSON.stringify(prevFeaturesProp)) { setFeatures(dashboardData.features || {}); } } const handleToggle = async (key: string, value: boolean) => { const newState = { ...enabled, [key]: value ? 1 : 0 }; setEnabled(newState); try { const response = await fetch(dashboardData.global.settingsRestUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': dashboardData.global.wpRestNonce }, body: JSON.stringify({ settings: { wawp_senders_enabled: newState } }) }); const result = await response.json(); if (result.success) { toast.success(result.message || t('toastSaved', 'Settings saved successfully')); window.dispatchEvent(new CustomEvent('wawp-senders-updated', { detail: newState })); } else { toast.error(result.message || t('toastFailed', 'Failed to save settings')); setEnabled(enabled); } } catch (e: unknown) { console.error('Sender save error:', e); toast.error(t('toastNetwork', 'Network error')); setEnabled(enabled); } }; const handleFeatureToggle = async (featureKey: string) => { const feature = features[featureKey]; if (!feature) return; const newValue = !feature.enabled; setFeatures((prev) => ({ ...prev, [featureKey]: { ...feature, enabled: newValue } })); try { const response = await fetch(dashboardData.global.settingsRestUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': dashboardData.global.wpRestNonce }, body: JSON.stringify({ settings: { [feature.option]: newValue ? 1 : 0 } }) }); const result = await response.json(); if (result.success) { toast.success(result.message || t('toastUpdated', 'Updated successfully')); const sidebarMapping: Record = { 'wawp_custom_pages_enabled': 'authPages', 'wawp_unified_log_enabled': 'activityHub', 'wawp_enable_tracking_ids': 'trackingIds', 'wawp_email_templates_enabled': 'emailTemplates' }; const sidebarKey = sidebarMapping[feature.option]; if (sidebarKey) { window.dispatchEvent(new CustomEvent('wawp-sections-updated', { detail: { [sidebarKey]: newValue } })); } } else { toast.error(result.message || t('toastError', 'An error occurred')); setFeatures(features); } } catch { toast.error(t('toastNetwork', 'Network error')); setFeatures(features); } }; const isRTL = !!dashboardData.rtl; const tabs = [ { id: 'overview', label: t('tabOverview', 'Senders Overview'), icon: LayoutDashboard }, { id: 'tools', label: t('tabTools', 'Messaging Tools'), icon: MessagesSquare } ]; interface SenderItem { id: string; name: string; desc: string; iconUrl: string; settingsUrl: string; allowed: boolean; docs: string; error?: string; } const sendersList: SenderItem[] = [ { id: 'wa', name: t('waName', 'WhatsApp Web'), desc: t('waDesc', 'Connect your personal WhatsApp for automated notifications and OTPs.'), iconUrl: `${dashboardData?.global?.pluginUrl || ''}assets/img/senders/whatsapp.svg`, settingsUrl: 'admin.php?page=wawp&wawp_section=whatsapp-web-sender', allowed: senderData.allowed.wa, docs: `https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/how-to-connect-whatsapp-web` }, { id: 'email', name: t('emailName', 'Email (SMTP)'), desc: t('emailDesc', 'Send transactional emails via your custom SMTP server for reliability.'), iconUrl: `${dashboardData?.global?.pluginUrl || ''}assets/img/senders/gmail.svg`, settingsUrl: 'admin.php?page=wawp&wawp_section=smtp-sender', allowed: senderData.allowed.email, docs: `https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/how-to-setup-smtp-email` } ]; return ( window.open( activeTab === 'tools' ? `https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/about-messaging-tools` : `https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/sender-settings-tutorial`, '_blank' )} title={ activeTab === 'tools' ? (dashboardData?.rtl ? 'دليل أدوات المراسلة' : 'Messaging Tools Guide') : (dashboardData?.rtl ? 'دليل إعدادات مرسلي الرسائل' : 'Sender Settings Guide') } > {/* Pro Version Senders Notice */}

{isRTL ? "المزيد من بوابات الإرسال وتتبع حالة القراءة (برو)" : "More Gateways & Read Tracking (Pro)"}

{isRTL ? "قم بترقية حسابك لتوصيل Firebase SMS و Meta WhatsApp Cloud API، وتتبع حالة قراءة الرسائل لمعرفة ما إذا كانت قد قُرئت أم لا!" : "Upgrade to Pro to connect Firebase SMS, Meta WhatsApp Cloud API, and track message read status (know if messages were read or not)!"}

{isRTL ? "شاهد الأسعار" : "View Pricing"}
{activeTab === 'overview' && (
{sendersList .map((sender) => ( : Cable} title={sender.name} desc={sender.desc} enabled={!!enabled[sender.id as keyof typeof enabled]} allowed={sender.allowed} error={sender.error} onToggle={() => handleToggle(sender.id, !enabled[sender.id])} settingsUrl={sender.settingsUrl} docs={sender.docs} upgradeUrl={dashboardData.urls.pricing} t={translations} /> ))}
)} {activeTab === 'tools' && (
handleToggle('block', !enabled.block)} settingsUrl="admin.php?page=wawp&wawp_section=block-manager" docs={`https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/how-to-block-whatsapp-numbers`} upgradeUrl={dashboardData.urls.pricing} t={translations} /> {features.trackingIds && ( handleFeatureToggle('trackingIds')} docs={`https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/unique-message-ids`} upgradeUrl={dashboardData.urls.pricing} t={translations} /> )} {features.activityHub && ( handleFeatureToggle('activityHub')} settingsUrl="admin.php?page=wawp&wawp_section=activity_hub" docs={`https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/activity-hub`} upgradeUrl={dashboardData.urls.pricing} t={translations} /> )} {features.emailTemplates && ( handleFeatureToggle('emailTemplates')} settingsUrl="admin.php?page=wawp&wawp_section=email_templates" docs={`https://help.wawp.net/${dashboardData?.rtl ? 'ar' : 'en'}/articles/email-templates`} upgradeUrl={dashboardData.urls.pricing} t={translations} /> )}
)}
); }