import { Card, CardContent } from '@/components/ui/card'; import { Zap, Check, Circle, Camera, FileText, MapPin, Phone, Clock } from 'lucide-react'; import { cn } from '@/lib/utils'; import { useTranslation } from '@/contexts/language'; interface ShopBountyCardProps { // Current form state to calculate potential reward hasName: boolean; hasAddress: boolean; hasCoordinates: boolean; hasDescription: boolean; hasPhone: boolean; hasWebsite: boolean; hasHours: boolean; photoCount: number; } interface QualityCheckItem { id: string; label: string; points: number; completed: boolean; icon: React.ComponentType<{ className?: string }>; } export function ShopBountyCard({ hasName, hasAddress, hasCoordinates, hasDescription, hasPhone, hasWebsite, hasHours, photoCount, }: ShopBountyCardProps) { const { t } = useTranslation(); const checks: QualityCheckItem[] = [ { id: 'name', label: t('placesUi.bounty.shopName'), points: 15, completed: hasName, icon: MapPin, }, { id: 'location', label: t('placesUi.bounty.addressCoords'), points: 20, completed: hasAddress && hasCoordinates, icon: MapPin, }, { id: 'photo1', label: t('placesUi.bounty.onePhoto'), points: 15, completed: photoCount >= 1, icon: Camera, }, { id: 'photo3', label: t('placesUi.bounty.threePhotos'), points: 10, completed: photoCount >= 3, icon: Camera, }, { id: 'description', label: t('placesUi.bounty.description'), points: 15, completed: hasDescription, icon: FileText, }, { id: 'contact', label: t('placesUi.bounty.contactInfo'), points: 10, completed: hasPhone || hasWebsite, icon: Phone, }, { id: 'hours', label: t('placesUi.bounty.openingHours'), points: 15, completed: hasHours, icon: Clock, }, ]; const completedChecks = checks.filter(c => c.completed); const score = completedChecks.reduce((sum, c) => sum + c.points, 0); const maxScore = checks.reduce((sum, c) => sum + c.points, 0); const percentage = Math.round((score / maxScore) * 100); const getScoreColor = () => { if (percentage >= 80) return 'text-green-400'; if (percentage >= 50) return 'text-[#ccff00]'; if (percentage >= 30) return 'text-yellow-400'; return 'text-orange-400'; }; const getProgressColor = () => { if (percentage >= 80) return 'bg-green-500'; if (percentage >= 50) return 'bg-[#ccff00]'; if (percentage >= 30) return 'bg-yellow-500'; return 'bg-orange-500'; }; const getScoreLabel = () => { if (percentage >= 80) return t('placesUi.bounty.excellent'); if (percentage >= 50) return t('placesUi.bounty.good'); if (percentage >= 30) return t('placesUi.bounty.basic'); return t('placesUi.bounty.gettingStarted'); }; return (
{t('placesUi.bounty.earningPotential')}
{getScoreLabel()} {percentage}%
{/* Progress Bar */}
{/* Checklist */}
{checks.map((check) => { const Icon = check.icon; return (
{check.completed ? ( ) : ( )}
{check.label} +{check.points}%
); })}
{/* Tip */}

{t('placesUi.bounty.tip')}

); }