'use client'; import { api } from '@/lib/api'; import { formatCurrency } from '@/lib/utils'; import { VerificationStatus } from '@/types'; import { useQuery } from '@tanstack/react-query'; import { motion } from 'framer-motion'; import { AlertCircle, CheckCircle2, Clock, ExternalLink, FileText, TrendingUp, Wallet, XCircle } from 'lucide-react'; import Link from 'next/link'; import { useParams } from 'next/navigation'; import { LoadingSpinner } from '@/components/ui/LoadingSpinner'; export default function SubmissionStatusPage() { const params = useParams(); const submissionId = params.submissionId as string; const { data, isLoading } = useQuery({ queryKey: ['submission', submissionId], queryFn: () => api.submissions.getStatus(submissionId), refetchInterval: 5000, // Poll every 5 seconds }); if (isLoading) { return (
); } const submission = data?.data?.submission; const task = data?.data?.task; const payment = data?.data?.payment; if (!submission) { return (

Submission not found

); } const statusConfig = { [VerificationStatus.PENDING]: { gradient: 'from-green-500 to-green-600', bgGradient: 'from-green-500/10 to-green-600/5', border: 'border-green-500/30', icon: Clock, iconColor: 'text-green-500', title: 'Verification in Progress', description: 'AI is verifying your submission. This usually takes 1-2 minutes.', }, [VerificationStatus.APPROVED]: { gradient: 'from-green-500 to-green-600', bgGradient: 'from-green-500/10 to-green-600/5', border: 'border-green-500/30', icon: CheckCircle2, iconColor: 'text-green-500', title: 'Submission Approved!', description: 'Your submission has been approved and payment has been sent to your wallet.', }, [VerificationStatus.REJECTED]: { gradient: 'from-red-500 to-red-600', bgGradient: 'from-red-500/10 to-red-600/5', border: 'border-red-500/30', icon: XCircle, iconColor: 'text-red-500', title: 'Submission Rejected', description: 'Your submission did not meet the verification criteria.', }, }; const config = statusConfig[submission.status as VerificationStatus]; const StatusIcon = config.icon; return (
{/* Animated Background */}
{/* Status Card */}
{config.title} {config.description} {/* Progress Bar for Pending */} {submission.status === VerificationStatus.PENDING && (

Estimated time: 1-2 minutes

)}
{/* Task Info */}

Task Details

Task: {task?.title}
Payment: {formatCurrency(task?.paymentAmount || 0)}
Submitted: {new Date(submission.submittedAt).toLocaleString()}
{/* Verification Results */} {submission.verificationResult && (

Verification Results

Score:
{submission.verificationResult.score} /100
{submission.verificationResult.reasoning && (
AI Reasoning:

{submission.verificationResult.reasoning}

)} {submission.verificationResult.error && (

Error:

{submission.verificationResult.error}

{submission.verificationResult.blockchainError && (

Blockchain: {submission.verificationResult.blockchainError}

)}
)}
)} {/* Payment Info */} {payment && payment.transactionHash && payment.transactionHash !== 'pending' && (

💰 Payment Details

Amount: {formatCurrency(payment.amount)}
Transaction Hash: {payment.transactionHash}
)} {/* Pending Payment */} {submission.status === VerificationStatus.APPROVED && (!payment || !payment.transactionHash || payment.transactionHash === 'pending') && (

💰 Payment Processing

Payment is being processed on the blockchain. This may take a few moments...

)} {/* Actions */} Browse More Tasks View Dashboard
); }