import React, { useState } from 'react';
import { StyleSheet, FlatList } from 'react-native';
import { ThemedView } from '@/components/themed-view';
import { ThemedText } from '@/components/themed-text';
import { TaskItem } from '@/components/task-item';
import { Task } from '@/types/gtd';
import { taskService } from '@/services';
import { Colors } from '@/constants/theme';
import { useColorScheme } from '@/hooks/use-color-scheme';
import { router } from 'expo-router';
export default function ArchiveScreen() {
const [tasks, setTasks] = useState<Task[]>([]);
const [loading, setLoading] = useState(true);
const colorScheme = useColorScheme();
const colors = Colors[colorScheme];
React.useEffect(() => {
loadCompletedTasks();
}, []);
const loadCompletedTasks = async () => {
try {
const completedTasks = await taskService.getCompletedTasks();
setTasks(completedTasks);
} catch (error) {
console.error('Failed to load completed tasks:', error);
} finally {
setLoading(false);
}
};
const handleTaskPress = (task: Task) => {
router.push({ pathname: '/modal', params: { taskId: task.id } });
};
const handleToggleComplete = async (taskId: string) => {
try {
await taskService.uncompleteTask(taskId);
await loadCompletedTasks();
} catch (error) {
console.error('Failed to uncomplete task:', error);
}
};
const formatDate = (timestamp?: number) => {
if (!timestamp) return '';
const date = new Date(timestamp);
const now = new Date();
const diffInDays = Math.floor((now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24));
if (diffInDays === 0) return 'Today';
if (diffInDays === 1) return 'Yesterday';
if (diffInDays < 7) return `${diffInDays} days ago`;
if (diffInDays < 30) return `${Math.floor(diffInDays / 7)} weeks ago`;
return `${Math.floor(diffInDays / 30)} months ago`;
};
if (loading) {
return (
<ThemedView style={styles.container}>
<ThemedView style={styles.emptyState}>
<ThemedText>Loading...</ThemedText>
</ThemedView>
</ThemedView>
);
}
if (tasks.length === 0) {
return (
<ThemedView style={styles.container}>
<ThemedView style={styles.emptyState}>
<ThemedText style={styles.emptyTitle}>No Completed Tasks</ThemedText>
<ThemedText style={styles.emptyDescription}>
Completed tasks will appear here
</ThemedText>
</ThemedView>
</ThemedView>
);
}
return (
<ThemedView style={styles.container}>
<FlatList
data={tasks}
keyExtractor={(item) => item.id}
contentContainerStyle={styles.listContent}
renderItem={({ item }) => (
<ThemedView>
<TaskItem
task={item}
onPress={() => handleTaskPress(item)}
onToggleComplete={() => handleToggleComplete(item.id)}
/>
{item.completedAt && (
<ThemedText style={[styles.completedDate, { color: colors.subtitle }]}>
Completed {formatDate(item.completedAt)}
</ThemedText>
)}
</ThemedView>
)}
/>
</ThemedView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
listContent: {
paddingHorizontal: 16,
paddingTop: 8,
paddingBottom: 32,
},
completedDate: {
fontSize: 12,
paddingHorizontal: 16,
paddingBottom: 12,
marginTop: -8,
},
emptyState: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
paddingHorizontal: 32,
},
emptyTitle: {
fontSize: 20,
fontWeight: '600',
marginBottom: 8,
},
emptyDescription: {
fontSize: 16,
opacity: 0.6,
textAlign: 'center',
},
});