import React, { useState } from 'react'; import { View, Text, StyleSheet, TouchableOpacity, TextInput, ScrollView, ActivityIndicator, Alert, } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { router } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { AppColors, Spacing, BorderRadius, FontSizes, FontWeights } from '@/constants/theme'; // DEV MODE: Mock activation code const MOCK_ACTIVATION_CODE = 'WELLNUO-DEMO'; export default function ActivateScreen() { const [activationCode, setActivationCode] = useState(''); const [isActivating, setIsActivating] = useState(false); const [step, setStep] = useState<'code' | 'beneficiary' | 'complete'>('code'); const [beneficiaryName, setBeneficiaryName] = useState(''); const [relationship, setRelationship] = useState(''); const handleActivate = async () => { if (!activationCode.trim()) { Alert.alert('Error', 'Please enter activation code'); return; } setIsActivating(true); // DEV MODE: Simulate activation await new Promise((resolve) => setTimeout(resolve, 1500)); // Accept any code in dev mode, or use the mock code if (activationCode.toUpperCase() === MOCK_ACTIVATION_CODE || activationCode.length >= 6) { setStep('beneficiary'); } else { Alert.alert('Invalid Code', 'Please check your activation code and try again.\n\nDEV: Use "WELLNUO-DEMO" or any 6+ character code.'); } setIsActivating(false); }; const handleAddBeneficiary = async () => { if (!beneficiaryName.trim()) { Alert.alert('Error', 'Please enter beneficiary name'); return; } setIsActivating(true); // DEV MODE: Simulate adding beneficiary await new Promise((resolve) => setTimeout(resolve, 1000)); setStep('complete'); setIsActivating(false); }; const handleComplete = () => { // Navigate to main app router.replace('/(tabs)'); }; const handleUseDemoCode = () => { setActivationCode(MOCK_ACTIVATION_CODE); }; // Step 1: Enter activation code if (step === 'code') { return ( {/* Header */} router.back()}> Activate Kit {/* Icon */} {/* Instructions */} Enter the activation code from your WellNuo Starter Kit packaging {/* Input */} {/* Development Notice */} Sensor Activation In Development Real sensor pairing is coming soon. For now, enter any code (6+ characters) to continue testing the app. Use Demo Code {/* Activate Button */} {isActivating ? ( ) : ( Activate )} {/* Skip for now */} Skip for now ); } // Step 2: Add beneficiary if (step === 'beneficiary') { return ( {/* Header */} setStep('code')}> Add Beneficiary {/* Icon */} {/* Instructions */} Who will you be monitoring with this kit? {/* Name Input */} Full Name {/* Relationship Input */} Relationship (optional) {/* Relationship Quick Select */} {['Mother', 'Father', 'Grandmother', 'Grandfather'].map((rel) => ( setRelationship(rel)} > {rel} ))} {/* Continue Button */} {isActivating ? ( ) : ( Continue )} ); } // Step 3: Complete return ( {/* Success Icon */} Kit Activated! Your WellNuo kit has been successfully activated for{' '} {beneficiaryName} {/* Next Steps */} Next Steps: 1 Place sensors in your loved one's home 2 Connect the hub to WiFi 3 Start receiving activity updates {/* Complete Button */} Go to Dashboard ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: AppColors.background, }, content: { flex: 1, padding: Spacing.lg, }, header: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: Spacing.xl, }, backButton: { padding: Spacing.sm, marginLeft: -Spacing.sm, }, title: { fontSize: FontSizes.xl, fontWeight: FontWeights.bold, color: AppColors.textPrimary, }, placeholder: { width: 40, }, iconContainer: { alignItems: 'center', marginBottom: Spacing.xl, }, instructions: { fontSize: FontSizes.base, color: AppColors.textSecondary, textAlign: 'center', marginBottom: Spacing.xl, lineHeight: 24, }, inputContainer: { marginBottom: Spacing.lg, }, inputGroup: { marginBottom: Spacing.lg, }, inputLabel: { fontSize: FontSizes.sm, fontWeight: FontWeights.medium, color: AppColors.textPrimary, marginBottom: Spacing.sm, }, input: { backgroundColor: AppColors.surface, borderRadius: BorderRadius.lg, paddingHorizontal: Spacing.lg, paddingVertical: Spacing.md, fontSize: FontSizes.lg, color: AppColors.textPrimary, textAlign: 'center', borderWidth: 1, borderColor: AppColors.border, }, devNotice: { alignItems: 'center', marginBottom: Spacing.xl, paddingVertical: Spacing.lg, paddingHorizontal: Spacing.lg, backgroundColor: `${AppColors.warning}10`, borderRadius: BorderRadius.lg, borderWidth: 1, borderColor: `${AppColors.warning}30`, }, devNoticeTitle: { fontSize: FontSizes.base, fontWeight: FontWeights.semibold, color: AppColors.warning, marginTop: Spacing.sm, marginBottom: Spacing.sm, }, devNoticeText: { fontSize: FontSizes.sm, color: AppColors.textSecondary, textAlign: 'center', lineHeight: 20, marginBottom: Spacing.md, }, demoCodeButton: { paddingVertical: Spacing.sm, paddingHorizontal: Spacing.lg, backgroundColor: AppColors.warning, borderRadius: BorderRadius.md, }, demoCodeButtonText: { fontSize: FontSizes.sm, fontWeight: FontWeights.medium, color: AppColors.white, }, primaryButton: { backgroundColor: AppColors.primary, paddingVertical: Spacing.lg, borderRadius: BorderRadius.lg, alignItems: 'center', marginTop: Spacing.md, }, buttonDisabled: { opacity: 0.7, }, primaryButtonText: { fontSize: FontSizes.lg, fontWeight: FontWeights.semibold, color: AppColors.white, }, skipButton: { alignItems: 'center', paddingVertical: Spacing.lg, }, skipButtonText: { fontSize: FontSizes.base, color: AppColors.textSecondary, textDecorationLine: 'underline', }, quickSelect: { flexDirection: 'row', flexWrap: 'wrap', gap: Spacing.sm, marginBottom: Spacing.xl, }, quickSelectButton: { paddingHorizontal: Spacing.md, paddingVertical: Spacing.sm, borderRadius: BorderRadius.full, backgroundColor: AppColors.surface, borderWidth: 1, borderColor: AppColors.border, }, quickSelectButtonActive: { backgroundColor: AppColors.primary, borderColor: AppColors.primary, }, quickSelectText: { fontSize: FontSizes.sm, color: AppColors.textSecondary, }, quickSelectTextActive: { color: AppColors.white, fontWeight: FontWeights.medium, }, successContainer: { flex: 1, alignItems: 'center', justifyContent: 'center', }, successIcon: { marginBottom: Spacing.xl, }, successTitle: { fontSize: FontSizes['2xl'], fontWeight: FontWeights.bold, color: AppColors.textPrimary, marginBottom: Spacing.md, }, successMessage: { fontSize: FontSizes.base, color: AppColors.textSecondary, textAlign: 'center', marginBottom: Spacing.xxl, }, beneficiaryHighlight: { fontWeight: FontWeights.bold, color: AppColors.primary, }, nextSteps: { width: '100%', backgroundColor: AppColors.surface, borderRadius: BorderRadius.lg, padding: Spacing.lg, }, nextStepsTitle: { fontSize: FontSizes.base, fontWeight: FontWeights.semibold, color: AppColors.textPrimary, marginBottom: Spacing.md, }, stepItem: { flexDirection: 'row', alignItems: 'center', gap: Spacing.md, marginBottom: Spacing.sm, }, stepNumber: { width: 24, height: 24, borderRadius: 12, backgroundColor: AppColors.primary, color: AppColors.white, textAlign: 'center', lineHeight: 24, fontSize: FontSizes.sm, fontWeight: FontWeights.bold, overflow: 'hidden', }, stepText: { fontSize: FontSizes.sm, color: AppColors.textSecondary, flex: 1, }, });