"""Registro de evaluaciones pedagógicas docente de aula (docs 31–40)."""

from dataclasses import dataclass
from typing import Sequence, Type

from app.backend.db import models
from app.backend import schemas
from app.backend.services.pedagogical_evaluation_factory import build_pedagogical_evaluation_router


@dataclass(frozen=True)
class PedagogicalGradeConfig:
    key: str
    prefix: str
    tag: str
    model: Type
    field_names: Sequence[str]
    default_document_type_id: int
    store_schema: Type
    update_schema: Type


def _cfg(
    key: str,
    field_names: Sequence[str],
    doc_type: int,
    tag: str,
) -> PedagogicalGradeConfig:
    model_name = ''.join(w.capitalize() for w in key.split('_')) + 'Model'
    store_name, update_name = f'Store{model_name.replace("Model", "")}', f'Update{model_name.replace("Model", "")}'
    return PedagogicalGradeConfig(
        key=key,
        prefix=f'/{key}',
        tag=tag,
        model=getattr(models, model_name),
        field_names=field_names,
        default_document_type_id=doc_type,
        store_schema=getattr(schemas, store_name),
        update_schema=getattr(schemas, update_name),
    )


PEDAGOGICAL_GRADE_CONFIGS: list[PedagogicalGradeConfig] = [
    _cfg(
        "pedagogical_evaluation_classroom_first_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "observations_mathematics",
        ],
        31,
        "Pedagogical Evaluation Classroom First Grade (Document 31)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_second_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "observations_mathematics",
        ],
        32,
        "Pedagogical Evaluation Classroom Second Grade (Document 32)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_third_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "observations_mathematics",
        ],
        33,
        "Pedagogical Evaluation Classroom Third Grade (Document 33)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_fourth_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        34,
        "Pedagogical Evaluation Classroom Fourth Grade (Document 34)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_fifth_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "attitude_13",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        35,
        "Pedagogical Evaluation Classroom Fifth Grade (Document 35)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_sixth_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "attitude_13",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        36,
        "Pedagogical Evaluation Classroom Sixth Grade (Document 36)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_seventh_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "attitude_13",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        37,
        "Pedagogical Evaluation Classroom Seventh Grade (Document 37)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_eighth_grade",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "attitude_13",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        38,
        "Pedagogical Evaluation Classroom Eighth Grade (Document 38)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_first_grade_secondary",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "attitude_13",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        39,
        "Pedagogical Evaluation Classroom First Grade Secondary (Document 39)",
    ),
    _cfg(
        "pedagogical_evaluation_classroom_second_grade_secondary",
        [
        "student_id",
        "document_type_id",
        "student_full_name",
        "student_identification_number",
        "student_born_date",
        "student_age",
        "establishment_id",
        "course",
        "report_date",
        "repetitions",
        "professional_id",
        "report_type",
        "school_situation_strengths",
        "observations",
        "attitude_1",
        "attitude_2",
        "attitude_3",
        "attitude_4",
        "attitude_5",
        "attitude_6",
        "attitude_7",
        "attitude_8",
        "attitude_9",
        "attitude_10",
        "attitude_11",
        "attitude_12",
        "attitude_13",
        "observations_attitude",
        "language_1",
        "language_2",
        "language_3",
        "language_4",
        "language_5",
        "language_6",
        "language_7",
        "language_8",
        "language_9",
        "language_10",
        "language_11",
        "language_12",
        "language_13",
        "language_14",
        "language_15",
        "language_16",
        "language_17",
        "observations_language",
        "reading_type",
        "comprehension_level",
        "writing_level",
        "mathematics_1",
        "mathematics_2",
        "mathematics_3",
        "mathematics_4",
        "mathematics_5",
        "mathematics_6",
        "mathematics_7",
        "mathematics_8",
        "mathematics_9",
        "mathematics_10",
        "mathematics_11",
        "mathematics_12",
        "mathematics_13",
        "mathematics_14",
        "mathematics_15",
        "mathematics_16",
        "mathematics_17",
        "observations_mathematics",
        ],
        40,
        "Pedagogical Evaluation Classroom Second Grade Secondary (Document 40)",
    ),
]

PEDAGOGICAL_GRADE_CONFIG_BY_KEY = {c.key: c for c in PEDAGOGICAL_GRADE_CONFIGS}


def register_pedagogical_evaluation_routers(app_router) -> None:
    """Monta los 10 routers de evaluación pedagógica desde el registro."""
    for cfg in PEDAGOGICAL_GRADE_CONFIGS:
        router = build_pedagogical_evaluation_router(
            prefix=cfg.prefix,
            tag=cfg.tag,
            model=cfg.model,
            field_names=cfg.field_names,
            default_document_type_id=cfg.default_document_type_id,
            store_schema=cfg.store_schema,
            update_schema=cfg.update_schema,
        )
        app_router.include_router(router)

