import { clsx } from 'clsx';
import { CheckCircle, XCircle, AlertTriangle, Info, Award, TrendingUp } from 'lucide-react';
interface CategoryAssessment {
category: string;
categoryName: string;
eligible: boolean;
score: number;
confidence: number;
highlights: string[];
concerns: string[];
missingInfo?: string[];
subClass?: string;
}
interface AssessmentData {
assessments: CategoryAssessment[];
overallRecommendation: string;
topRecommended: string[];
suitabilityScore: number;
summary: string;
}
function ScoreBar({ score, label }: { score: number; label?: string }) {
const getColor = (s: number) => {
if (s >= 90) return 'bg-green-500';
if (s >= 70) return 'bg-blue-500';
if (s >= 50) return 'bg-yellow-500';
if (s >= 30) return 'bg-orange-500';
return 'bg-red-500';
};
const getLabel = (s: number) => {
if (s >= 90) return '高度适合';
if (s >= 70) return '比较适合';
if (s >= 50) return '有条件适合';
if (s >= 30) return '适合度低';
return '不适合';
};
return (
{label || getLabel(score)} {score}
);
}
function CategoryCard({ assessment, isRecommended }: { assessment: CategoryAssessment; isRecommended: boolean }) {
return (
{isRecommended &&
}
{assessment.categoryName}
{assessment.category}
{assessment.subClass && (
{assessment.subClass}
)}
{assessment.eligible ? (
) : (
)}
{assessment.eligible ? '符合条件' : '不符合'}
{assessment.highlights.length > 0 && (
{assessment.highlights.map((h, i) => (
{h}
))}
)}
{assessment.concerns.length > 0 && (
{assessment.concerns.map((c, i) => (
))}
)}
{assessment.missingInfo && assessment.missingInfo.length > 0 && (
{assessment.missingInfo.map((m, i) => (
{m}
))}
)}
);
}
export function AssessmentResultCard({ data }: { data: AssessmentData }) {
const topSet = new Set(data.topRecommended);
// Sort: recommended first, then by score
const sorted = [...data.assessments].sort((a, b) => {
const aRec = topSet.has(a.category) ? 1 : 0;
const bRec = topSet.has(b.category) ? 1 : 0;
if (aRec !== bRec) return bRec - aRec;
return b.score - a.score;
});
return (
{/* Header with overall score */}
移民资格评估报告
综合适合度
= 70 ? 'text-green-600' :
data.suitabilityScore >= 50 ? 'text-yellow-600' : 'text-red-500',
)}>
{data.suitabilityScore}
{/* Summary */}
{data.summary && (
{data.summary}
)}
{/* Category assessments */}
{sorted.map((assessment) => (
))}
{/* Overall recommendation */}
{data.overallRecommendation && (
建议:{data.overallRecommendation}
)}
);
}