import * as React from 'react' import { useTranslation } from '@/i18n' import { formatDualDate } from '@/lib/date-utils' import type { UserTourItem } from '../types' import { fetchUserTours } from '../services/users-api' import { Ic } from '@/icons' interface UserToursTabProps { userId: number } type TimelineFilter = 'all' | 'active' | 'upcoming' | 'past' export function UserToursTab({ userId }: UserToursTabProps) { const { t, language } = useTranslation() const [timeline, setTimeline] = React.useState('all') const [loading, setLoading] = React.useState(true) const [tours, setTours] = React.useState([]) const loadTours = React.useCallback(async () => { setLoading(true) try { const res = await fetchUserTours(userId, timeline) setTours(res.results || []) } catch (err) { console.error('Failed to load user tours:', err) setTours([]) } finally { setLoading(false) } }, [userId, timeline]) React.useEffect(() => { loadTours() }, [loadTours]) const formatDate = (isoDate: string | null | undefined) => { if (!isoDate) return '—' return formatDualDate(isoDate, language as any) } const getOrderStatusBadge = (status: string) => { switch (status) { case 'APPROVED': return ( {t('billing.statusApproved')} ) case 'PENDING': return ( {t('billing.statusPending')} ) case 'AWAITING_PAYMENT': return ( {t('billing.statusAwaiting')} ) case 'REJECTED': return ( {t('billing.statusRejected')} ) case 'EXPIRED': return ( {t('billing.statusExpired')} ) default: return ( {status} ) } } const getTripStatusBadge = (tripStatus: string | null | undefined) => { if (!tripStatus) return null let colorClass = 'bg-muted text-muted-foreground' if (tripStatus === 'TRAVELING') { colorClass = 'bg-primary/10 text-primary font-semibold' } else if (tripStatus === 'FINISHED' || tripStatus === 'COMPLETED') { colorClass = 'bg-muted/60 text-muted-foreground' } else if (tripStatus === 'PENDING') { colorClass = 'bg-amber-500/10 text-amber-600 dark:text-amber-400' } return ( {tripStatus} ) } return (
{/* ساب‌تب‌های کپسولی برای فیلتر وضعیت‌های زمانی تور */}
{/* محتوای تورها */} {loading ? (
{[1, 2, 3].map((i) => (
))}
) : tours.length === 0 ? (

{t('users.noToursFound')}

{t('billing.noFactorsFilter')}

) : (
{tours.map((order) => (
{/* سمت راست: عنوان و جزئیات */}

{order.tour_title || `سفارش #${order.id}`}

{getOrderStatusBadge(order.status)} {getTripStatusBadge(order.tour_trip_status)}
{formatDate(order.tour_started_at)} الی {formatDate(order.tour_ended_at)}
ثبت: {formatDate(order.created?.slice(0, 10))}
{/* سمت چپ: قیمت و وضعیت مالی */}
{t('users.tourPrice')} ${Number(order.total_price || 0).toLocaleString()}
{order.is_paid ? 'پرداخت شده' : 'پرداخت نشده'}
))}
)}
) }