from app.schemas.grade_1.subtract_with_image_reference import (
    FigureGroup,
    PictureAsset,
    SubtractWithImageReferenceProblem,
    SubtractionEquation,
)


def subtract_with_image_reference(
    object_name: str,
    initial_quantity: int,
    removed_quantity: int,
    figure: dict,
    actor_name: str = "Diego",
) -> dict:
    """Generate a subtraction story problem with remaining and removed groups."""
    if removed_quantity > initial_quantity:
        raise ValueError("removed_quantity must be less than or equal to initial_quantity")

    selected_figure = PictureAsset.model_validate(figure)
    remaining_quantity = initial_quantity - removed_quantity
    question = (
        f"Hay {initial_quantity} {object_name}. "
        f"{actor_name} sacó {removed_quantity} {object_name}. "
        f"¿Cuántos {object_name} quedan?"
    )
    problem = SubtractWithImageReferenceProblem(
        question=question,
        object_name=object_name,
        actor_name=actor_name,
        figure=selected_figure,
        remaining_group=FigureGroup(
            label="quedan",
            quantity=remaining_quantity,
            picture=selected_figure,
        ),
        subtracted_group=FigureGroup(
            label="sacó",
            quantity=removed_quantity,
            picture=selected_figure,
        ),
        equation=SubtractionEquation(
            initial_quantity=initial_quantity,
            removed_quantity=removed_quantity,
            remaining_quantity=remaining_quantity,
        ),
    )

    return problem.model_dump()
