'use client' import { useState, useEffect } from 'react' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { MessageSquare, Clock, CheckCircle, XCircle } from 'lucide-react' import { toast } from 'sonner' interface MentoringRequestCardProps { projectId: string roundId: string roundName: string } export function MentoringRequestCard({ projectId, roundId, roundName }: MentoringRequestCardProps) { const [timeLeft, setTimeLeft] = useState('') const { data: status, isLoading } = trpc.applicant.getMentoringRequestStatus.useQuery( { projectId, roundId }, { refetchInterval: 60_000 }, ) const utils = trpc.useUtils() const requestMutation = trpc.applicant.requestMentoring.useMutation({ onSuccess: (data) => { toast.success(data.requesting ? 'Mentoring requested' : 'Mentoring request cancelled') utils.applicant.getMentoringRequestStatus.invalidate({ projectId, roundId }) utils.applicant.getMyDashboard.invalidate() }, onError: (error) => toast.error(error.message), }) // Countdown timer useEffect(() => { if (!status?.deadline) return const update = () => { const now = new Date() const deadline = new Date(status.deadline!) const diff = deadline.getTime() - now.getTime() if (diff <= 0) { setTimeLeft('Expired') return } const days = Math.floor(diff / (1000 * 60 * 60 * 24)) const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)) if (days > 0) setTimeLeft(`${days}d ${hours}h remaining`) else if (hours > 0) setTimeLeft(`${hours}h ${minutes}m remaining`) else setTimeLeft(`${minutes}m remaining`) } update() const interval = setInterval(update, 60_000) return () => clearInterval(interval) }, [status?.deadline]) if (isLoading || !status?.available) return null return ( Mentoring — {roundName} {status.requested ? (

Mentoring requested

{status.requestedAt ? `Requested on ${new Date(status.requestedAt).toLocaleDateString()}` : 'Awaiting mentor assignment'}

) : (

Not requesting mentoring

You will advance automatically without a mentoring period.

)} {/* Deadline info */} {status.deadline && (
Request window: {status.canStillRequest ? ( {timeLeft} ) : ( Closed )}
)} {/* Action button */} {status.canStillRequest && ( )} {!status.canStillRequest && (

The mentoring request window has closed.

)}
) }