##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2022 Emmanuel Viennet.  All rights reserved.
# See LICENSE
##############################################################################

"""Jury BUT: calcul des décisions de jury annuelles "automatiques"
"""

from app import db
from app.but import jury_but
from app.models.etudiants import Identite
from app.models.formsemestre import FormSemestre
from app.scodoc import sco_cache
from app.scodoc.sco_exceptions import ScoValueError


def formsemestre_validation_auto_but(formsemestre: FormSemestre) -> int:
    """Calcul automatique des décisions de jury sur une année BUT.
    Returns: nombre d'étudiants "admis"
    """
    if not formsemestre.formation.is_apc():
        raise ScoValueError("fonction réservée aux formations BUT")
    nb_admis = 0
    with sco_cache.DeferredSemCacheManager():
        for etudid in formsemestre.etuds_inscriptions:
            etud: Identite = Identite.query.get(etudid)
            deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
            if deca.admis:  # année réussie
                deca.record_all()
                nb_admis += 1

    db.session.commit()
    return nb_admis
