import { PlantingRecommendation, RiskFactor } from '../../lib/demand/types'; interface RecommendationListProps { recommendations: PlantingRecommendation[]; onSelect?: (recommendation: PlantingRecommendation) => void; loading?: boolean; } const RISK_COLORS: Record = { low: 'bg-green-100 text-green-800', medium: 'bg-yellow-100 text-yellow-800', high: 'bg-red-100 text-red-800', }; const OVERALL_RISK_COLORS: Record = { low: 'text-green-600 bg-green-50 border-green-200', medium: 'text-yellow-600 bg-yellow-50 border-yellow-200', high: 'text-red-600 bg-red-50 border-red-200', }; function formatCategory(category: string): string { return category.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()); } function formatDate(dateString: string): string { return new Date(dateString).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric', }); } export default function RecommendationList({ recommendations, onSelect, loading = false, }: RecommendationListProps) { if (loading) { return (

Planting Recommendations

{[1, 2, 3].map((i) => (
))}
); } if (recommendations.length === 0) { return (

Planting Recommendations

🌱

No recommendations available yet.

Check back later or update your preferences to get personalized recommendations.

); } return (

Planting Recommendations

{recommendations.length} suggestions
{recommendations.map((rec) => ( ))}
); } function RecommendationCard({ recommendation: rec, onSelect, }: { recommendation: PlantingRecommendation; onSelect?: (recommendation: PlantingRecommendation) => void; }) { return (
onSelect?.(rec)} > {/* Header */}

{rec.produceType}

{rec.variety && {rec.variety}} | {formatCategory(rec.category)}

{rec.overallRisk} Risk
{/* Content */}
{/* Key metrics */}

{rec.recommendedQuantity}

{rec.quantityUnit}

{rec.expectedYieldKg.toFixed(1)} kg

Expected Yield

${rec.projectedRevenue.toFixed(0)}

Est. Revenue

{/* Timing */}
Plant by: {formatDate(rec.plantByDate)}
|
Harvest: {formatDate(rec.expectedHarvestStart)} - {formatDate(rec.expectedHarvestEnd)}
{/* Market opportunity */}
Market Opportunity
{[1, 2, 3, 4, 5].map((level) => (
))} {rec.marketConfidence}%
Projected demand: {rec.projectedDemandKg.toFixed(0)} kg @ ${rec.projectedPricePerKg.toFixed(2)}/kg
{/* Risk factors */} {rec.riskFactors.length > 0 && (

Risk Factors

{rec.riskFactors.slice(0, 3).map((risk, index) => ( {risk.type} ))} {rec.riskFactors.length > 3 && ( +{rec.riskFactors.length - 3} more )}
)} {/* Explanation */}

"{rec.explanation}"

{/* Growing days indicator */}
Growing period: {rec.growingDays} days Yield confidence: {rec.yieldConfidence}%
); }