// ============ AcademIA8 · Consola — Usuarios de prueba (reset por curso) ============
// Vive DENTRO de cada curso (pestaña "Pruebas", junto a "Alumnos"): rearma la
// experiencia de un número de prueba EN ESE CURSO puntual, sin tocar sus
// inscripciones a otros cursos. Sin CLI ni credenciales AWS (C4bis-reset).
//
// El front nunca ve ni manda un teléfono completo para el REARMADO: cada
// número trae un `id` opaco (ver A8Api.listPruebasAllowlist); el backend
// resuelve id->teléfono contra la allowlist fresca de SSM en cada llamada y
// rechaza cualquier `id` que no resuelva. El ALTA es la única excepción
// necesaria: quien agrega un número lo tipea, así que ese teléfono SÍ viaja
// (igual que en `admin_reset allowlist add --phone`).
//
// La allowlist es GLOBAL del entorno (dev/prod) -- los mismos números
// habilitan el rearmado en TODOS los cursos, aunque el alta/baja se gestione
// desde acá adentro de uno puntual. Tope de 5 números y formato E.164
// validados server-side (console_service.py); el front solo refleja.
// Quitar un número de la allowlist NUNCA borra datos de ningún alumno: solo
// deshabilita el rearmado para ese número (ver texto del botón).
function RearmarModal({ course, id, telefonoEnmascarado, onClose, onDone }){
const [step,setStep] = useState('cargando'); // cargando | listo | ejecutando | resultado
const [inv,setInv] = useState(null);
const [error,setError] = useState(null);
const [resultado,setResultado] = useState(null);
useEffect(()=>{
let alive = true;
(async ()=>{
try {
const inventario = await A8Api.pruebasInventario(course.id, id);
if (alive){ setInv(inventario); setStep('listo'); }
} catch(e){ if (alive) setError((e&&e.message)||String(e)); }
})();
return ()=>{ alive = false; };
}, [course.id, id]);
async function confirmar(){
setStep('ejecutando'); setError(null);
try {
const r = await A8Api.pruebasReset(course.id, id);
setResultado(r);
setStep('resultado');
onDone && onDone();
} catch(e){ setError((e&&e.message)||String(e)); setStep('listo'); }
}
return (
{resultado.borrado
? <>Se borraron {resultado.borrado.items_borrados} registros de la inscripción anterior.Trayendo el inventario…
Experiencia rearmada en este curso
>
: 'No había inscripción previa en este curso.'}
Reinscripto como {resultado.reinscripcion.alumno_id}.
Los números de prueba habilitados valen para todos los cursos, no solo este — vive acá por comodidad, porque "Rearmar experiencia en este curso" borra tu avance en{' '} {course.meta_draft?.name || course.id} y te reinscribe desde cero, sin tocar tus otros cursos.