/**
* Page /sujets — sélection d'un sujet en cartes pour une production en cours.
*
* Flux :
* 1. /simulation/ee → selectTask (POST /simulations) → navigate('/sujets')
* 2. Ici : liste les sujets de la tâche en cours, permet choix manuel ou aléatoire
* 3. Sélection → changeSubject + navigate('/simulation/ee') (SimulationForm visible)
*
* MVP : refresh direct sur /sujets → redirect vers /simulation/ee (pas de state).
* Règle D : aucun contrôle de plan/quota ici — déjà fait à la création de la simulation.
* Règle H : aucune logique métier — délègue au provider + useSujets.
* Règle L : tokens Direction H exclusivement.
*/
import { useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
import { Shuffle } from 'lucide-react'
import { Button } from '@/shared/ui/Button'
import { formatTache } from '@/entities/production/lib'
import type { SujetData } from '@/entities/production/types'
import { useSimulationFlow } from '../state/simulationFlow'
import { useSujets } from '../hooks/useSujets'
import { SujetCard } from '../components/SujetCard'
function SujetsSkeleton() {
return (
{Array.from({ length: 6 }).map((_, i) => (
))}
)
}
export function SujetsPage() {
const navigate = useNavigate()
const { step, production, changeSubject, setStep, reset } = useSimulationFlow()
// Redirige vers /simulation/ee si :
// - production absente (refresh direct sur /sujets sans contexte)
// - step === 'idle' (état initial, pas de simulation en cours)
// - step === 'done' (simulation corrigée — /sujets ne doit pas patcher
// une simulation dont le rapport est déjà persisté — cf. FTD-23)
const shouldRedirect = !production || step === 'idle' || step === 'done'
useEffect(() => {
if (shouldRedirect) navigate('/simulation/ee', { replace: true })
}, [shouldRedirect, navigate])
const { data: sujets, isLoading, isError, refetch } = useSujets(
production?.tache ?? 'EE_T1',
!!production && !shouldRedirect,
)
if (shouldRedirect || !production) return null
function handleSelect(sujet: SujetData) {
changeSubject(sujet)
setStep('task-selected')
navigate('/simulation/ee')
}
function handleRandom() {
if (!sujets || sujets.length === 0) return
const pool = production?.sujet
? sujets.filter((s) => s.id !== production.sujet?.id)
: sujets
const list = pool.length > 0 ? pool : sujets
const pick = list[Math.floor(Math.random() * list.length)]
if (pick) handleSelect(pick)
}
const hasSujets = (sujets?.length ?? 0) > 0
return (
Choisir un sujet — {formatTache(production.tache)}
{isLoading
? 'Chargement des sujets…'
: hasSujets
? `${sujets!.length} sujet${sujets!.length > 1 ? 's' : ''} disponible${sujets!.length > 1 ? 's' : ''}.`
: 'Aucun sujet disponible pour cette tâche.'}