"""
==================================================
Smart Attendance AI
Training API
==================================================
Registers a student by generating an average
face embedding from multiple training images.
==================================================
"""

from typing import List

from fastapi import APIRouter
from fastapi import File
from fastapi import Form
from fastapi import UploadFile

from core.image_data import ImageData

from services.image_service import ImageService
from services.trainer_service import TrainerService

from utils.request import Request as RequestUtil
from utils.response import Response
from utils.serializer import Serializer


router = APIRouter()


@router.post(
    "/train",
    summary="Train Student Face"
)
async def train_student(
    student_id: str = Form(...),
    images: List[UploadFile] = File(...)
):
    """
    Train a student using multiple face images.
    """

    request_id = RequestUtil.generate_id()

    image_data: List[ImageData] = (
        await ImageService.read_multiple(
            images
        )
    )

    result = TrainerService.train(

        student_id=student_id,

        images=image_data

    )

    return Response.success(

        message="Training completed successfully.",

        data=Serializer.serialize(
            result
        )

    )