import { useMemo, useState } from 'react' import { useListStore } from '@/features/list/stores/useListStore' import { MOCK_ITEMS } from '@/features/list/mocks/mockItems' import type { ListItem } from '@/features/list/types' const PAGE_SIZE = 20 // 목데이터 클라이언트 필터 (추후 API 조회로 교체) export function useList() { const { selectedType, selectedStatus, selectedDeadline, currentPage, setCurrentPage } = useListStore() const [selectedId, setSelectedId] = useState(null) const filtered = useMemo(() => { const result = MOCK_ITEMS.filter( (item) => (!selectedType || item.qt_type === selectedType) && (!selectedStatus || item.session_status === selectedStatus), ) if (selectedDeadline) { const dir = selectedDeadline === '남은 시간 적은 순' ? 1 : -1 result.sort( (a, b) => (new Date(a.qt_end_time).getTime() - new Date(b.qt_end_time).getTime()) * dir, ) } return result }, [selectedType, selectedStatus, selectedDeadline]) const totalPages = Math.max(1, Math.ceil(filtered.length / PAGE_SIZE)) const items = useMemo( () => filtered.slice((currentPage - 1) * PAGE_SIZE, currentPage * PAGE_SIZE), [filtered, currentPage], ) const selectedItem = useMemo( () => items.find((item) => item.session_id === selectedId) ?? null, [items, selectedId], ) const handleItemClick = (item: ListItem) => setSelectedId((prev) => (prev === item.session_id ? null : item.session_id)) return { items, isLoading: false, totalPages, currentPage, setCurrentPage, selectedId, selectedItem, handleItemClick, } }