"""Strict pydantic models for the 2014 SRD, one module per upstream schema file.

COLLECTIONS maps each upstream JSON filename to the model every record in that
file must validate against.
"""

from dnd5e_db.models.base import SRDModel
from dnd5e_db.models.srd2014.ability_scores import AbilityScore
from dnd5e_db.models.srd2014.alignments import Alignment
from dnd5e_db.models.srd2014.backgrounds import Background
from dnd5e_db.models.srd2014.classes import Class
from dnd5e_db.models.srd2014.conditions import Condition
from dnd5e_db.models.srd2014.damage_types import DamageType
from dnd5e_db.models.srd2014.equipment import Equipment
from dnd5e_db.models.srd2014.equipment_categories import EquipmentCategory
from dnd5e_db.models.srd2014.feats import Feat
from dnd5e_db.models.srd2014.features import Feature
from dnd5e_db.models.srd2014.languages import Language
from dnd5e_db.models.srd2014.levels import Level
from dnd5e_db.models.srd2014.magic_items import MagicItem
from dnd5e_db.models.srd2014.magic_schools import MagicSchool
from dnd5e_db.models.srd2014.monsters import Monster
from dnd5e_db.models.srd2014.proficiencies import Proficiency
from dnd5e_db.models.srd2014.races import Race
from dnd5e_db.models.srd2014.rule_sections import RuleSection
from dnd5e_db.models.srd2014.rules import Rule
from dnd5e_db.models.srd2014.skills import Skill
from dnd5e_db.models.srd2014.spells import Spell
from dnd5e_db.models.srd2014.subclasses import Subclass
from dnd5e_db.models.srd2014.subraces import Subrace
from dnd5e_db.models.srd2014.traits import Trait
from dnd5e_db.models.srd2014.weapon_properties import WeaponProperty

COLLECTIONS: dict[str, type[SRDModel]] = {
    "5e-SRD-Ability-Scores.json": AbilityScore,
    "5e-SRD-Alignments.json": Alignment,
    "5e-SRD-Backgrounds.json": Background,
    "5e-SRD-Classes.json": Class,
    "5e-SRD-Conditions.json": Condition,
    "5e-SRD-Damage-Types.json": DamageType,
    "5e-SRD-Equipment-Categories.json": EquipmentCategory,
    "5e-SRD-Equipment.json": Equipment,
    "5e-SRD-Feats.json": Feat,
    "5e-SRD-Features.json": Feature,
    "5e-SRD-Languages.json": Language,
    "5e-SRD-Levels.json": Level,
    "5e-SRD-Magic-Items.json": MagicItem,
    "5e-SRD-Magic-Schools.json": MagicSchool,
    "5e-SRD-Monsters.json": Monster,
    "5e-SRD-Proficiencies.json": Proficiency,
    "5e-SRD-Races.json": Race,
    "5e-SRD-Rule-Sections.json": RuleSection,
    "5e-SRD-Rules.json": Rule,
    "5e-SRD-Skills.json": Skill,
    "5e-SRD-Spells.json": Spell,
    "5e-SRD-Subclasses.json": Subclass,
    "5e-SRD-Subraces.json": Subrace,
    "5e-SRD-Traits.json": Trait,
    "5e-SRD-Weapon-Properties.json": WeaponProperty,
}

__all__ = [
    "COLLECTIONS",
    "AbilityScore",
    "Alignment",
    "Background",
    "Class",
    "Condition",
    "DamageType",
    "Equipment",
    "EquipmentCategory",
    "Feat",
    "Feature",
    "Language",
    "Level",
    "MagicItem",
    "MagicSchool",
    "Monster",
    "Proficiency",
    "Race",
    "Rule",
    "RuleSection",
    "Skill",
    "Spell",
    "Subclass",
    "Subrace",
    "Trait",
    "WeaponProperty",
]
