import {NextRequest,NextResponse} from 'next/server';
import {authenticatedStudent} from '@/lib/student-session';
import {prisma} from '@/lib/access';
import {questions} from '@/lib/quiz';
export const runtime='nodejs';
export async function POST(request:NextRequest){
 try{
  const user=await authenticatedStudent(request);
  if(!user)return NextResponse.json({error:'Accès élève requis'},{status:401});
  if(Number(request.headers.get('content-length')||0)>8192)return NextResponse.json({error:'Requête trop volumineuse'},{status:413});
  const body=await request.json();
  if(!body||body.kind!=='OTR1_QUIZ'||!body.answers||typeof body.answers!=='object'||Array.isArray(body.answers))return NextResponse.json({error:'Format invalide'},{status:400});
  const answers:Record<string,number>={};
  for(const q of questions){
   const v=body.answers[q.id];
   if(!Number.isInteger(v)||v<0||v>=q.answers.length)return NextResponse.json({error:'Quiz incomplet ou invalide'},{status:400});
   answers[q.id]=v;
  }
  const score=questions.filter(q=>answers[q.id]===q.correct).length;
  const result=await prisma.trainingResult.create({data:{userId:user.id,kind:'OTR1_QUIZ',score,total:questions.length,payload:answers},select:{id:true,createdAt:true,score:true,total:true}});
  return NextResponse.json({result},{status:201,headers:{'Cache-Control':'no-store'}});
 }catch{return NextResponse.json({error:'Enregistrement indisponible'},{status:500});}
}
export async function GET(request:NextRequest){
 try{
  const user=await authenticatedStudent(request);
  if(!user)return NextResponse.json({error:'Accès élève requis'},{status:401});
  const results=await prisma.trainingResult.findMany({where:{userId:user.id},orderBy:{createdAt:'desc'},take:50,select:{id:true,kind:true,score:true,total:true,createdAt:true}});
  return NextResponse.json({results},{headers:{'Cache-Control':'no-store'}});
 }catch{return NextResponse.json({error:'Résultats indisponibles'},{status:500});}
}
