import { useState } from 'react'; import { ActivityIndicator, Alert, Pressable, ScrollView, Text, View, } from 'react-native'; import { useBottomTabBarHeight } from 'react-native-bottom-tabs'; import { useTranslation } from 'react-i18next'; import { Ionicons } from '@expo/vector-icons'; import { AppHeader } from '../../components/AppHeader'; import { MailStatsRow } from '../../components/mail/MailStatsRow'; import { MailAccountCard } from '../../components/mail/MailAccountCard'; import { MailEmptyState } from '../../components/mail/MailEmptyState'; import { MailActivityLog } from '../../components/mail/MailActivityLog'; import { ConnectMailSheet } from '../../components/mail/ConnectMailSheet'; import { SuccessAlert } from '../../components/SuccessAlert'; import { useMailStatus } from '../../hooks/useMailStatus'; import { useMailDisconnect } from '../../hooks/useMailDisconnect'; import { useUserPlan } from '../../hooks/useUserPlan'; export default function MailScreen() { const { t } = useTranslation(); const tabBarHeight = useBottomTabBarHeight(); const { plan } = useUserPlan(); const { connected, accounts, totalBlocked, maxAccounts, loading, refresh } = useMailStatus(plan); const { disconnect, disconnecting } = useMailDisconnect(); const [sheetVisible, setSheetVisible] = useState(false); const [successVisible, setSuccessVisible] = useState(false); const [disconnectingId, setDisconnectingId] = useState(null); const [expandedAccount, setExpandedAccount] = useState(null); const [activityLogExpanded, setActivityLogExpanded] = useState(false); const nextScanAt = accounts .map((a) => a.nextScanAt) .filter((v): v is string => v !== null) .sort()[0] ?? null; const limitReached = accounts.length >= maxAccounts; function handleAddPress() { if (limitReached) { Alert.alert(t('mail.upgrade_alert_title'), t('mail.upgrade_alert_desc')); return; } setSheetVisible(true); } async function handleDisconnect(id: string) { setDisconnectingId(id); await disconnect(id); setDisconnectingId(null); if (expandedAccount === id) setExpandedAccount(null); refresh(); } function handleConnectSuccess() { setSuccessVisible(true); refresh(); } function toggleAccount(id: string) { setExpandedAccount((prev) => (prev === id ? null : id)); } if (loading) { return ( ); } return ( {/* Stats card */} {accounts.length > 0 && ( )} {/* Section header with prominent + button */} {t('mail.section_accounts')} {maxAccounts === Infinity ? t('mail.section_accounts_count_unlimited', { used: accounts.length }) : t('mail.section_accounts_count', { used: accounts.length, max: maxAccounts, })} {t('mail.add_account')} {/* Account cards or empty */} {accounts.length === 0 ? ( ) : ( {accounts.map((account, idx) => ( toggleAccount(account.id)} onDisconnect={handleDisconnect} onIntervalChanged={refresh} onEditSuccess={handleConnectSuccess} disconnecting={disconnectingId === account.id && disconnecting} /> ))} )} {/* Activity log */} {accounts.length > 0 && ( setActivityLogExpanded((p) => !p)} /> )} setSheetVisible(false)} onSuccess={handleConnectSuccess} /> setSuccessVisible(false)} /> ); }