'use client'; import styled from 'styled-components'; export interface MissionSummary { id: number; title: string; description: string; xp_reward: number; mana_reward: number; difficulty: string; is_active: boolean; is_available: boolean; locked_reasons: string[]; is_completed: boolean; requires_documents: boolean; has_coding_challenges: boolean; coding_challenge_count: number; completed_coding_challenges: number; } const Card = styled.div` background: rgba(17, 22, 51, 0.85); border-radius: 14px; padding: 1.25rem; border: 1px solid rgba(108, 92, 231, 0.25); `; export function MissionList({ missions }: { missions: MissionSummary[] }) { if (missions.length === 0) { return

Нет активных миссий — скоро появятся новые испытания.

; } return (
{missions.map((mission) => { const completed = mission.is_completed; const locked = !mission.is_available && !completed; const primaryClass = completed ? 'secondary' : locked ? 'secondary' : 'primary'; const linkDisabled = locked; const actionLabel = completed ? 'Миссия выполнена' : mission.is_available ? mission.has_coding_challenges ? 'Решать задачи' : 'Открыть брифинг' : 'Заблокировано'; return (
{mission.difficulty} {completed && ✓ завершено}
{mission.requires_documents && !completed && (

🗂 Требуется загрузка документов

)}

{mission.title}

{mission.description}

{mission.has_coding_challenges && (

💻 Прогресс: {mission.completed_coding_challenges}/{mission.coding_challenge_count} заданий

)}

{mission.xp_reward} XP · {mission.mana_reward} ⚡

{locked && mission.locked_reasons.length > 0 && (

{mission.locked_reasons[0]}

)} {actionLabel}
); })}
); }