import React from 'react';
import { XCircle, CheckCircle2, HelpCircle, Plus, ChevronDown } from 'lucide-react';
import type { LucideIcon } from 'lucide-react';
import { localized } from '../../../utils/i18n-fields';
import { enumLabel } from '../../../utils/i18n-enums';
import { FindingCard, type FindingAccent } from '../sections/FindingCard';
import { SectionDivider } from '../sections/SectionDivider';
import {
CollapseBtn, CollapseBtnLeft, CollapseBtnChevron,
StancePill, FindingSourceLink,
} from '../styles';
const DEFAULT_VISIBLE = 4;
function claimIcon(status: string, statusColor?: string): LucideIcon {
if (status === 'verified_false' || statusColor === 'red') return XCircle;
if (status === 'verified_true' || statusColor === 'green') return CheckCircle2;
return HelpCircle;
}
function claimAccent(status: string, statusColor?: string): FindingAccent {
if (status === 'verified_false' || statusColor === 'red') return 'critical';
if (status === 'verified_true' || statusColor === 'green') return 'success';
return 'neutral';
}
function stanceFromString(s: string): 'contradicts' | 'supports' | 'neutral' {
const u = (s || '').toUpperCase();
if (u === 'CONTRADICTS') return 'contradicts';
if (u === 'SUPPORTS') return 'supports';
return 'neutral';
}
function sourceHostname(url: string): string {
return (url || '').replace(/^https?:\/\/(www\.)?/, '').split('/')[0];
}
export function renderClaimsEditorial(
data: any,
isRo: boolean,
expanded: boolean,
onToggle: () => void,
) {
if (!data) return null;
const claims = data.claims_verified || data.claims || [];
if (claims.length === 0) return null;
const total = data.total_claims || claims.length;
const trueCount = data.verified_true || 0;
const falseCount = data.verified_false || 0;
const unverified = data.unverified || 0;
const summaryParts = [
`${total} ${isRo ? 'total' : 'total'}`,
trueCount > 0 ? `${trueCount} ${isRo ? 'adevărate' : 'true'}` : null,
falseCount > 0 ? `${falseCount} ${isRo ? 'false' : 'false'}` : null,
unverified > 0 ? `${unverified} ${isRo ? 'neverificate' : 'unverified'}` : null,
].filter(Boolean).join(' · ');
const visible = expanded ? claims.length : Math.min(DEFAULT_VISIBLE, claims.length);
const shown = claims.slice(0, visible);
const remaining = claims.length - visible;
return (
<>
{shown.map((claim: any, i: number) => {
const icon = claimIcon(claim.status, claim.status_color);
const accent = claimAccent(claim.status, claim.status_color);
const statusName = localized(claim, 'status_name') || enumLabel(claim.status || '');
const typeName = claim.type_name || enumLabel(claim.type || '');
const eyebrowParts = [
statusName,
typeName,
claim.priority ? `${isRo ? 'prioritate' : 'priority'} ${claim.priority}` : null,
].filter(Boolean);
const sources = (claim.sources || []).slice(0, 6);
return (
0 ? (
<>
{(() => {
const dominantStance = sources[0]?.stance ? stanceFromString(sources[0].stance) : 'neutral';
return (
{isRo
? (dominantStance === 'contradicts' ? 'Contrazice' : dominantStance === 'supports' ? 'Susține' : 'Neutru')
: (dominantStance === 'contradicts' ? 'Contradicts' : dominantStance === 'supports' ? 'Supports' : 'Neutral')}
);
})()}
{sources.map((src: any, idx: number) => (
{idx > 0 && ·}
e.stopPropagation()}>
{sourceHostname(src.url)}
))}
>
) : undefined}
/>
);
})}
{remaining > 0 && (
{isRo
? `Vezi celelalte ${remaining} ${remaining === 1 ? 'afirmație' : 'afirmații'}`
: `Show ${remaining} more ${remaining === 1 ? 'claim' : 'claims'}`}
)}
{expanded && claims.length > DEFAULT_VISIBLE && (
{isRo ? 'Ascunde' : 'Hide'}
)}
>
);
}
export function renderClaimsDetail(data: any, _t: any) {
const isRo = (typeof document !== 'undefined' && document.documentElement.lang || '').toLowerCase().startsWith('ro');
return ;
}
const RenderClaimsStatic: React.FC<{ data: any; isRo: boolean }> = ({ data, isRo }) => {
const [expanded, setExpanded] = React.useState(false);
return <>{renderClaimsEditorial(data, isRo, expanded, () => setExpanded(o => !o))}>;
};
export function renderClaimsSummary(data: any, t: any) {
if (!data) return null;
return (
{data.total_claims || 0} {t('pipeline.claimsLabel')}
{data.verified_false > 0 ? ` · ${data.verified_false} ${t('pipeline.falseLabel')}` : ''}
);
}