'use client' import { useEffect, useState } from 'react' import { useParams } from 'next/navigation' import PageNavbar from '@/components/layouts/PageNavbar' import Button from '@/components/formElements/Button' import Input from '@/components/formElements/Input' import { APP_ROUTES } from '@/constants/routes' import { addToast } from '@/lib/toast' import { formatIranianMobile, formatPersianDate } from '@/lib/formatters' import { adminReplyToSupportTicket, getAdminSupportTicket, SUPPORT_ADMIN_STATUS_LABELS, SUPPORT_CATEGORY_LABELS, SUPPORT_PRIORITY_LABELS, updateSupportTicketStatus, type SupportTicket, } from '@/services/supportTickets' const AdminSupportTicketDetail = () => { const { id } = useParams<{ id: string }>() const [ticket, setTicket] = useState(null) const [reply, setReply] = useState('') const [pending, setPending] = useState(false) useEffect(() => { void getAdminSupportTicket(id) .then(setTicket) .catch(() => addToast({ title: 'دریافت تیکت ناموفق بود', color: 'danger' })) }, [id]) const send = async () => { if (!reply.trim()) return try { setPending(true) const updated = await adminReplyToSupportTicket(id, reply) setTicket(updated) setReply('') addToast({ title: 'پاسخ ثبت شد و پیامک کاربر در صف ارسال قرار گرفت', color: 'success' }) } catch { addToast({ title: 'ثبت پاسخ ناموفق بود', color: 'danger' }) } finally { setPending(false) } } const changeStatus = async (status: string) => { try { setTicket(await updateSupportTicketStatus(id, status)) addToast({ title: 'وضعیت تیکت تغییر کرد', color: 'success' }) } catch { addToast({ title: 'تغییر وضعیت ناموفق بود', color: 'danger' }) } } return (
{!ticket ? (

در حال دریافت…

) : ( <>

کاربر

{ticket.user.displayName || 'کاربر'}

{formatIranianMobile(ticket.user.mobile)}

دسته‌بندی

{SUPPORT_CATEGORY_LABELS[ticket.category]}

اولویت

{SUPPORT_PRIORITY_LABELS[ticket.priority]}
{ticket.messages.map((message) => (

{message.isAdmin ? 'پشتیبانی' : ticket.user.displayName || 'کاربر'}

{message.body}

{formatPersianDate(message.createdAt)}

))}
{ticket.status !== 'closed' ? (
{ setReply(String(value)) }} />

پس از ثبت پاسخ، برای کاربر پیامک اطلاع‌رسانی ارسال می‌شود.

) : null} )}
) } export default AdminSupportTicketDetail