import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { Mail, Plus, Copy, Check, ChevronDown, ChevronUp, Trash2, Tag, Info, PlusCircle, X, Sparkles, ShieldAlert } from 'lucide-react'; import { LocalizationSchema, Language } from '../types'; import GoogleServicesHub from './GoogleServicesHub'; import { safeCopyToClipboard } from '../utils/clipboard'; interface EmailAlias { id: string; aliasAddress: string; platform: string; } interface MainEmailAccount { id: string; address: string; aliases: EmailAlias[]; } interface EmailsViewProps { key?: string; t: LocalizationSchema['emails']; lang: Language; } const SEED_EMAILS: MainEmailAccount[] = [ { id: 'seed-email-1', address: 'drmartin2050@gmail.com', aliases: [ { id: 'alias-1', aliasAddress: 'drmartin.bolt@gmail.com', platform: 'Bolt.new' }, { id: 'alias-2', aliasAddress: 'drmartin.lovable@gmail.com', platform: 'Lovable' }, { id: 'alias-3', aliasAddress: 'drmartin.supabase@gmail.com', platform: 'Supabase' }, ] }, { id: 'seed-email-2', address: 'eissa.developer@outlook.com', aliases: [ { id: 'alias-4', aliasAddress: 'eissa.v0@outlook.com', platform: 'v0.dev' }, { id: 'alias-5', aliasAddress: 'eissa.replit@outlook.com', platform: 'Replit' }, ] } ]; export default function EmailsView({ t, lang }: EmailsViewProps) { const [accounts, setAccounts] = useState([]); const [expandedId, setExpandedId] = useState('seed-email-1'); const [copiedId, setCopiedId] = useState(null); // Modal forms states const [isMainModalOpen, setIsMainModalOpen] = useState(false); const [isAliasModalOpen, setIsAliasModalOpen] = useState(false); const [selectedMainAccountId, setSelectedMainAccountId] = useState(''); // Error/Success state to show inside modal instead of window.alert const [modalError, setModalError] = useState(''); // Fields for main email const [newMainEmail, setNewMainEmail] = useState(''); // Fields for alias email const [newAliasEmail, setNewAliasEmail] = useState(''); const [newAliasPlatform, setNewAliasPlatform] = useState('Bolt.new'); const [customPlatform, setCustomPlatform] = useState(''); // Hydrate from localStorage on load useEffect(() => { const saved = localStorage.getItem('dev_hub_emails_aliases'); if (saved) { try { setAccounts(JSON.parse(saved)); } catch (e) { setAccounts(SEED_EMAILS); } } else { setAccounts(SEED_EMAILS); } }, []); // Save to localStorage when changed const saveAccounts = (updated: MainEmailAccount[]) => { setAccounts(updated); localStorage.setItem('dev_hub_emails_aliases', JSON.stringify(updated)); }; const handleCopy = (address: string, id: string) => { safeCopyToClipboard(address); setCopiedId(id); setTimeout(() => setCopiedId(null), 2000); }; const toggleAccordion = (id: string) => { setExpandedId(prev => (prev === id ? null : id)); }; const handleAddMainEmail = (e: React.FormEvent) => { e.preventDefault(); setModalError(''); if (!newMainEmail.trim() || !newMainEmail.includes('@')) { setModalError(lang === 'ar' ? 'يرجى إدخال بريد إلكتروني رئيسي صالح!' : 'Please enter a valid main email address.'); return; } // Check if duplicate if (accounts.some(acc => acc.address.toLowerCase() === newMainEmail.trim().toLowerCase())) { setModalError(lang === 'ar' ? 'البريد الإلكتروني موجود بالفعل!' : 'This email address is already registered!'); return; } const newAccount: MainEmailAccount = { id: `main-${Date.now()}`, address: newMainEmail.trim(), aliases: [] }; const updated = [newAccount, ...accounts]; saveAccounts(updated); setExpandedId(newAccount.id); setNewMainEmail(''); setModalError(''); setIsMainModalOpen(false); }; const handleOpenAddAlias = (accountId: string) => { setSelectedMainAccountId(accountId); setModalError(''); setIsAliasModalOpen(true); }; const handleAddAlias = (e: React.FormEvent) => { e.preventDefault(); setModalError(''); if (!newAliasEmail.trim() || !newAliasEmail.includes('@')) { setModalError(lang === 'ar' ? 'يرجى إدخال عنوان مستعار صالح!' : 'Please enter a valid alias email.'); return; } const finalPlatform = newAliasPlatform === 'Other' ? customPlatform.trim() : newAliasPlatform; if (!finalPlatform.trim()) { setModalError(lang === 'ar' ? 'يرجى تحديد المنصة المرتبطة!' : 'Please specify the associated platform.'); return; } const updated = accounts.map(acc => { if (acc.id === selectedMainAccountId) { return { ...acc, aliases: [ ...acc.aliases, { id: `alias-${Date.now()}`, aliasAddress: newAliasEmail.trim(), platform: finalPlatform } ] }; } return acc; }); saveAccounts(updated); setNewAliasEmail(''); setNewAliasPlatform('Bolt.new'); setCustomPlatform(''); setModalError(''); setIsAliasModalOpen(false); }; const handleDeleteMain = (accountId: string, e: React.MouseEvent) => { e.stopPropagation(); if (confirm(lang === 'ar' ? 'هل تود حذف هذا البريد الرئيسي والأسماء المستعارة التابعة له نهائياً؟' : 'Are you sure you want to delete this main email and all its aliases permanently?')) { const updated = accounts.filter(acc => acc.id !== accountId); saveAccounts(updated); if (expandedId === accountId) { setExpandedId(updated[0]?.id || null); } } }; const handleDeleteAlias = (accountId: string, aliasId: string) => { if (confirm(lang === 'ar' ? 'هل تود حذف هذا الاسم المستعار؟' : 'Are you sure you want to delete this alias?')) { const updated = accounts.map(acc => { if (acc.id === accountId) { return { ...acc, aliases: acc.aliases.filter(alias => alias.id !== aliasId) }; } return acc; }); saveAccounts(updated); } }; const platformPresets = ['Bolt.new', 'Lovable', 'v0.dev', 'Cursor', 'GitHub', 'OpenAI', 'Supabase', 'Other']; return (
{/* Promo Banner / Qwen gradient details */}
{lang === 'ar' ? 'إدارة الهوية والبروكسي' : 'ALIAS & BOUND EMAIL PROXY'}

{t.title}

{t.subtitle}

{/* Real Live Google Workspace Integration Hub */} {/* Main Action Bar */}
{lang === 'ar' ? `إجمالي العناوين المسجلة: ${accounts.length} بريد رئيسي مع ${accounts.reduce((sum, acc) => sum + acc.aliases.length, 0)} بريد مستعار` : `Total: ${accounts.length} Main Emails with ${accounts.reduce((sum, acc) => sum + acc.aliases.length, 0)} registered aliases` }
{/* Main Accordion Loop */} {accounts.length === 0 ? (

{t.noEmailsYet}

) : (
{accounts.map(acc => { const isExpanded = expandedId === acc.id; return (
{/* Accordion Trigger Header */}
toggleAccordion(acc.id)} className="flex items-center justify-between p-5 cursor-pointer bg-white transition select-none" >
{t.mainEmailLabel} {acc.address}
{acc.aliases.length} aliases
{isExpanded ? : }
{/* Expanded Accordion List */} {isExpanded && (
{/* Title & Plus Actions */}
{lang === 'ar' ? 'الأسماء المستعارة التابعة (Platform Logins)' : 'Bound Platform Alias List'}
{acc.aliases.length === 0 ? (

{lang === 'ar' ? 'لا توجد أسماء مستعارة مربوطة بعد لهذا العنوان.' : 'No associated alias proxy emails attached yet.'}

{lang === 'ar' ? 'اضغط على إضافة اسم مستعار بالمسار لربط حسابات Bolt أو Lovable' : 'Tap Add Alias above to bind and map Bolt.new, Lovable or other proxy credentials.'}

) : (
{acc.aliases.map(alias => (
{alias.platform}

{alias.aliasAddress}

))}
)}
)}
); })}
)} {/* Accordion helper instruction card */}
{lang === 'ar' ? 'تلميحة المتصفح السريعة' : 'Development Tip'}

{lang === 'ar' ? 'عند قيامك ببناء تطبيقات باستخدام Bolt.new أو Lovable، يمكنك استخدام الأسماء المستعارة لعزل اشتراكاتك أو تخزين الأكواد بشكل وتتبع حساب مستقل وتفادي قفل الحدود الشهرية.' : 'When building prototype applications on platforms like Bolt.new, Lovable, or Vercel, utilizing custom email aliases allows you to partition credentials cleanly, isolation subscriptions, and avoid cross-account billing or tier limit overlap.' }

{/* Modal 1: Add Main Email Account */} {isMainModalOpen && (
setIsMainModalOpen(false)} className="absolute inset-0 bg-slate-900/60 backdrop-blur-sm" />

{t.modalTitleMain}

{modalError && (
{modalError}
)}
setNewMainEmail(e.target.value)} placeholder={t.placeholderMainEmail} className="w-full text-slate-800 bg-slate-50 border border-slate-200 rounded-xl p-3 outline-none text-sm placeholder:text-slate-400 focus:border-indigo-505 hover:border-slate-300 transition-colors font-semibold font-mono" />
)}
{/* Modal 2: Add Sub-email Alias Account */} {isAliasModalOpen && (
setIsAliasModalOpen(false)} className="absolute inset-0 bg-slate-900/60 backdrop-blur-sm" />

{t.modalTitleAlias}

{modalError && (
{modalError}
)}
setNewAliasEmail(e.target.value)} placeholder={t.placeholderAliasEmail} className="w-full text-slate-804 bg-slate-50 border border-slate-205 rounded-xl p-3 outline-none text-sm placeholder:text-slate-400 focus:border-indigo-505 hover:border-slate-300 transition-colors font-semibold font-mono" />
{newAliasPlatform === 'Other' && (
setCustomPlatform(e.target.value)} placeholder="Bolt.new" className="w-full text-slate-800 bg-slate-50 border border-slate-200 rounded-xl p-3 outline-none text-sm focus:border-indigo-505 font-semibold" />
)}
)}
); }