import { useState } from 'react'; import { Alert, ScrollView, StyleSheet, Text, View, } from 'react-native'; import Animated, { FadeInDown, LinearTransition } from 'react-native-reanimated'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import * as Haptics from 'expo-haptics'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Card, Divider, SectionLabel } from '@/components/ui/primitives'; import { useSalaryCalculator } from '@/hooks/use-app-hooks'; import { Colors, Spacing, Typography } from '@/constants/theme'; import { formatCurrency } from '@/utils/tax-calculator'; import { updateUserSalary } from '@/services/api'; import { useAuth } from '@/contexts/AuthContext'; import { useIsFocused } from "expo-router/react-navigation"; export default function SalaryScreen() { const insets = useSafeAreaInsets(); const { user, updateUser } = useAuth(); const isFocused = useIsFocused(); const [grossStr, setGrossStr] = useState(user?.gross_salary ? String(user.gross_salary) : ''); const [netOverrideStr, setNetOverrideStr] = useState( user?.net_salary_override ? String(user.net_salary_override) : '' ); const [isOverriding, setIsOverriding] = useState(!!user?.net_salary_override); const result = useSalaryCalculator(grossStr); const effectiveNet = isOverriding ? parseFloat(netOverrideStr.replace(',', '.')) || 0 : (result?.salarioLiquidoCalculado ?? 0); const [isSaving, setIsSaving] = useState(false); const [saved, setSaved] = useState(false); async function handleSave() { if (!result || !user) return; try { setIsSaving(true); setSaved(false); const updatedUser = await updateUserSalary(user.id, { gross_salary: result.salarioBruto, net_salary_override: isOverriding ? effectiveNet : null, }); await updateUser(updatedUser); Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success); setSaved(true); setTimeout(() => setSaved(false), 2500); } catch (err) { Alert.alert('Erro', 'Não foi possível salvar o salário.'); } finally { setIsSaving(false); } } function handleToggleOverride() { if (isOverriding) { setNetOverrideStr(''); setIsOverriding(false); } else { setNetOverrideStr(result?.salarioLiquidoCalculado.toFixed(2) ?? ''); setIsOverriding(true); } } return ( {isFocused && ( Meu Salário Informe seu salário bruto e ajuste o líquido se necessário. {result && ( Salário Bruto {formatCurrency(result.salarioBruto)} Desconto INSS - {formatCurrency(result.descontoINSS)} Desconto IRRF - {formatCurrency(result.descontoIRRF)} Salário Líquido {formatCurrency(result.salarioLiquidoCalculado)} )} {result && (