import { useEffect, useState } from 'react'; import type { TemplateGeneration } from '@/lib/api/template-generations'; import { getTemplateGenerations } from '@/lib/api/template-generations'; type TabKey = 'all' | 'image' | 'video'; export function useProfileData(activeTab: TabKey) { const [generations, setGenerations] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [isRefreshing, setIsRefreshing] = useState(false); const [isLoadingMore, setIsLoadingMore] = useState(false); const [hasMore, setHasMore] = useState(true); const [currentPage, setCurrentPage] = useState(1); useEffect(() => { setGenerations([]); setCurrentPage(1); setHasMore(true); loadGenerations(1, true); }, [activeTab]); const loadGenerations = async (page = 1, isRefresh = false) => { try { if (isRefresh) { setIsRefreshing(true); } else if (page === 1) { setIsLoading(true); } else { setIsLoadingMore(true); } setError(null); const response = await getTemplateGenerations({ page, limit: 20, type: activeTab === 'all' ? undefined : activeTab === 'image' ? 'IMAGE' : 'VIDEO' }); if (response.success) { const newGenerations = response.data.generations; const totalPages = Math.ceil(response.data.total / response.data.limit); if (isRefresh || page === 1) { setGenerations(newGenerations); } else { setGenerations(prev => [...prev, ...newGenerations]); } setHasMore(page < totalPages); setCurrentPage(page); } } catch (err) { console.error('Failed to load generations:', err); setError('Failed to load content'); } finally { setIsLoading(false); setIsRefreshing(false); setIsLoadingMore(false); } }; const handleRefresh = () => { loadGenerations(1, true); }; const handleLoadMore = () => { if (!isLoadingMore && hasMore) { loadGenerations(currentPage + 1, false); } }; return { generations, isLoading, error, isRefreshing, isLoadingMore, hasMore, handleRefresh, handleLoadMore, }; }