import { useEffect, useState } from 'react' export function useAccountsData({ apiFetch }) { const [queueStatus, setQueueStatus] = useState(null) const [keysExpanded, setKeysExpanded] = useState(false) const [accounts, setAccounts] = useState([]) const [page, setPage] = useState(1) const [pageSize, setPageSize] = useState(10) const [totalPages, setTotalPages] = useState(1) const [totalAccounts, setTotalAccounts] = useState(0) const [loadingAccounts, setLoadingAccounts] = useState(false) const resolveAccountIdentifier = (acc) => { if (!acc || typeof acc !== 'object') return '' return String(acc.identifier || acc.email || acc.mobile || '').trim() } const [searchQuery, setSearchQuery] = useState('') const fetchAccounts = async (targetPage = page, targetPageSize = pageSize, targetQuery = searchQuery) => { setLoadingAccounts(true) try { let url = `/admin/accounts?page=${targetPage}&page_size=${targetPageSize}` if (targetQuery.trim()) url += `&q=${encodeURIComponent(targetQuery.trim())}` const res = await apiFetch(url) if (res.ok) { const data = await res.json() setAccounts(data.items || []) setTotalPages(data.total_pages || 1) setTotalAccounts(data.total || 0) setPage(data.page || 1) } } catch (e) { console.error('Failed to fetch accounts:', e) } finally { setLoadingAccounts(false) } } const changePageSize = (newSize) => { setPageSize(newSize) fetchAccounts(1, newSize) } const handleSearchChange = (query) => { setSearchQuery(query) fetchAccounts(1, pageSize, query) } const fetchQueueStatus = async () => { try { const res = await apiFetch('/admin/queue/status') if (res.ok) { const data = await res.json() setQueueStatus(data) } } catch (e) { console.error('Failed to fetch queue status:', e) } } useEffect(() => { fetchAccounts() fetchQueueStatus() const interval = setInterval(fetchQueueStatus, 5000) return () => clearInterval(interval) }, []) return { queueStatus, keysExpanded, setKeysExpanded, accounts, page, pageSize, totalPages, totalAccounts, loadingAccounts, fetchAccounts, changePageSize, resolveAccountIdentifier, searchQuery, handleSearchChange, } }