import React from 'react' import { useTranslation } from 'react-i18next' import { Box, Heading, Text, Table, Badge } from '@chakra-ui/react' import type { ChainDetailed, TaskProgressStatus } from '../../types/challenge' interface ChainDetailedViewProps { chains: ChainDetailed[] } interface StatusConfig { label: string color: 'gray' | 'yellow' | 'blue' | 'orange' | 'green' } const getStatusConfig = (status: TaskProgressStatus, t: (key: string) => string): StatusConfig => { const configs: Record = { not_started: { label: t('challenge.admin.detailed.stats.status.not.started'), color: 'gray' }, pending: { label: t('challenge.admin.detailed.stats.status.pending'), color: 'yellow' }, in_progress: { label: t('challenge.admin.detailed.stats.status.in.progress'), color: 'blue' }, needs_revision: { label: t('challenge.admin.detailed.stats.status.needs.revision'), color: 'orange' }, completed: { label: t('challenge.admin.detailed.stats.status.completed'), color: 'green' }, } return configs[status] } export const ChainDetailedView: React.FC = ({ chains }) => { const { t } = useTranslation() if (chains.length === 0) { return ( {t('challenge.admin.detailed.stats.chains.title')} {t('challenge.admin.detailed.stats.chains.empty')} ) } const chain = chains[0] // Теперь всегда одна цепочка из API return ( {t('challenge.admin.detailed.stats.chains.title')} {chain.name} {t('challenge.admin.detailed.stats.chains.total.tasks')} {chain.totalTasks} {chain.participantProgress.length > 0 ? ( {t('challenge.admin.detailed.stats.chains.participant')} {chain.tasks.map((task) => ( {task.title} ))} {t('challenge.admin.detailed.stats.chains.progress')} {chain.participantProgress.map((participant) => ( {participant.nickname} {participant.taskProgress.map((taskProg) => { const config = getStatusConfig(taskProg.status, t) return ( {config.label} ) })} = 80 ? 'green' : participant.progressPercent >= 50 ? 'yellow' : 'red' } > {participant.progressPercent}% {participant.completedCount}/{chain.totalTasks} ))} ) : ( {t('challenge.admin.detailed.stats.chains.no.participants')} )} ) }