'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 (
);
}
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:
{task?.title}
Payment:
{formatCurrency(task?.paymentAmount || 0)}
Submitted:
{new Date(submission.submittedAt).toLocaleString()}
{/* Verification Results */}
{submission.verificationResult && (
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)}
)}
{/* Pending Payment */}
{submission.status === VerificationStatus.APPROVED && (!payment || !payment.transactionHash || payment.transactionHash === 'pending') && (
Payment is being processed on the blockchain. This may take a few moments...
)}
{/* Actions */}
Browse More Tasks
View Dashboard
);
}