import { useState } from 'react';
import { Alert, Platform, Text, View } from 'react-native';
import { useTranslation } from 'react-i18next';
import { Ionicons } from '@expo/vector-icons';
import { useColors } from '../../../lib/theme';
import { apiFetch } from '../../../lib/api';
import { invalidateMe } from '../../../hooks/useMe';
import { protection } from '../../../lib/protection';
import { OnboardingShell } from '../OnboardingShell';
import { LyraBubble } from '../LyraBubble';
import { CTABar } from '../CTABar';
import { PermissionDeniedSheet } from '../../PermissionDeniedSheet';
export function ProtectionSlide({
onDone,
current,
total,
}: {
/** Wird gerufen wenn URL-Filter erfolgreich aktiviert wurde. */
onDone: () => void;
current: number;
total: number;
}) {
const { t } = useTranslation();
const colors = useColors();
const [activating, setActivating] = useState(false);
const [permissionDeniedOpen, setPermissionDeniedOpen] = useState(false);
async function activate() {
if (activating) return;
setActivating(true);
try {
const res = await protection.activateUrlFilter();
if (!res.enabled) {
const isCodeFive =
Platform.OS === 'ios' &&
typeof res.error === 'string' &&
/NEFilterErrorDomain:\s*5/i.test(res.error);
if (isCodeFive) {
setPermissionDeniedOpen(true);
return;
}
Alert.alert(
t('onboarding.protection.error_title'),
res.error ?? t('onboarding.protection.error_unknown'),
);
return;
}
// Schutz live → step='done'
await apiFetch('/api/profile/me/onboarding-step', {
method: 'PATCH',
body: { step: 'done' },
}).catch(() => {});
invalidateMe();
onDone();
} catch (e: unknown) {
Alert.alert(
t('common.error'),
e instanceof Error ? e.message : t('common.unknown_error'),
);
} finally {
setActivating(false);
}
}
return (
}
>
{t('onboarding.protection.permission_note')}
setPermissionDeniedOpen(false)}
onRetry={async () => {
const res = await protection.resetUrlFilter();
if (res.enabled) {
await apiFetch('/api/profile/me/onboarding-step', {
method: 'PATCH',
body: { step: 'done' },
}).catch(() => {});
invalidateMe();
onDone();
}
return res;
}}
/>
);
}
function ProtectionRow({
icon,
title,
desc,
colors,
}: {
icon: keyof typeof Ionicons.glyphMap;
title: string;
desc: string;
colors: import('../../../lib/theme').ColorScheme;
}) {
return (
{title}
{desc}
);
}