import React, { useState } from 'react' import { View, TouchableOpacity, StyleSheet, ScrollView, } from 'react-native' import { Text } from '@/components/ui/Text'; import { Stack } from 'expo-router' import { format, subDays, startOfDay, endOfDay } from 'date-fns' import { Paths, File } from 'expo-file-system' import * as Sharing from 'expo-sharing' import { SafeAreaView } from 'react-native-safe-area-context' import { Button } from '@/components/ui/Button' import { Section, SectionHeader } from '@/components/ui/Sections' import { DatePickerField } from '@/components/ui/DatePickerField' import { apiClient, ApiError } from '@/lib/api' import { useToast } from '@/context/ToastContext' import { translateError } from '@/lib/errors/translations' import { Colors, Spacing, BorderRadius } from '@/constants/theme' const PRESETS = [ { label: '7 dias', days: 7 }, { label: '30 dias', days: 30 }, { label: '90 dias', days: 90 }, { label: 'Personalizado', days: 0 }, ] export default function ReportScreen() { const { showToast } = useToast() const [preset, setPreset] = useState(30) const [startDate, setStartDate] = useState(() => subDays(new Date(), 30)) const [endDate, setEndDate] = useState(() => new Date()) const [loading, setLoading] = useState(false) const isCustom = preset === 0 function selectPreset(days: number) { setPreset(days) if (days > 0) { setStartDate(subDays(new Date(), days)) setEndDate(new Date()) } } async function handleGenerate() { setLoading(true) try { const buffer = await apiClient.generateReport( startOfDay(startDate).toISOString(), endOfDay(endDate).toISOString(), ) const fileName = `nexo-report-${format(startDate, 'yyyy-MM')}.pdf` const file = new File(Paths.cache, fileName) file.write(new Uint8Array(buffer)) await Sharing.shareAsync(file.uri, { mimeType: 'application/pdf', dialogTitle: 'Salvar relatório', }) } catch (err) { showToast( err instanceof ApiError ? translateError(err.message) : 'Erro ao gerar relatório', 'error', ) } finally { setLoading(false) } } return ( Seu relatório de humor Reúne os registros do período escolhido — humores, sentimentos e níveis de ansiedade, estresse e energia — num PDF pronto para compartilhar com seu terapeuta ou guardar só pra você.
{PRESETS.map((p) => ( selectPreset(p.days)} activeOpacity={0.7} > {p.label} ))}
{isCustom && (
)}