from __future__ import annotations

from sqlalchemy.orm import Session

from ..models import Article112Act, Evaluation, User


def original_article112_evaluation(evaluation: Evaluation) -> Evaluation:
    return evaluation.parent if evaluation.is_article112 and evaluation.parent else evaluation


def get_or_create_article112_act(db: Session, evaluation: Evaluation, actor: User) -> Article112Act:
    original = original_article112_evaluation(evaluation)
    if original.is_article112 or not original.article112_triggered:
        raise ValueError("La evaluación no tiene activado el Artículo 112")
    existing = db.query(Article112Act).filter(Article112Act.evaluation_id == original.id).first()
    if existing:
        return existing
    year_label = original.school_year.name if original.school_year else "SIN-AÑO"
    safe_year = year_label.replace("-", "")
    act = Article112Act(
        evaluation_id=original.id,
        act_number=f"ACT-112-{safe_year}-{original.id:05d}",
        addressee="Coordinación de Evaluación",
        issued_by_id=actor.id,
    )
    db.add(act)
    db.flush()
    return act
