from flask import g, url_for
from flask_wtf import FlaskForm
from wtforms import FieldList, Form, DecimalField, validators

from app.models import ApcParcours, ApcReferentielCompetences, UniteEns


class _UEParcoursECTSForm(FlaskForm):
    "Formulaire association ECTS par parcours à une UE"
    # construit dynamiquement ci-dessous


def UEParcoursECTSForm(ue: UniteEns) -> FlaskForm:
    "Génère formulaire association ECTS par parcours à une UE"

    class F(_UEParcoursECTSForm):
        pass

    parcours: list[ApcParcours] = ue.formation.referentiel_competence.parcours
    # Initialise un champ de saisie par parcours
    for parcour in parcours:
        ects = ue.get_ects(parcour, only_parcours=True)
        setattr(
            F,
            f"ects_parcour_{parcour.id}",
            DecimalField(
                f"Parcours {parcour.code}",
                validators=[
                    validators.Optional(),
                    validators.NumberRange(min=0, max=30),
                ],
                default=ects,
            ),
        )
    return F()