"""
Rule taxonomy for BZO extraction.
Defines fixed rule types and their patterns for deterministic rule detection.
"""

RULE_TAXONOMY = {
    "max_building_height": {
        "patterns": ["fassadenhöhe", "fassadenhöhen", "gebäudehöhe", "firsthöhe", "traufhöhe", "höchsthöhe", "gesamt höhe", "gesamt höhen"],
        "units": ["m", "meter", "metern"],
        "value_type": "numeric",
        "keywords": ["max", "maximal", "höchstens"]
    },
    "max_floors": {
        "patterns": ["vollgeschosse", "vollgeschoss", "geschosse", "geschosszahl"],
        "units": [],
        "value_type": "integer",
        "keywords": ["max", "maximal", "höchstens"]
    },
    "max_attachable_attics": {
        "patterns": ["anrechenbare dachgeschosse", "anrechenbares attikageschoss", "dachgeschosse", "attikageschoss"],
        "units": [],
        "value_type": "integer",
        "keywords": ["max", "maximal"]
    },
    "max_attachable_basement": {
        "patterns": ["anrechenbares untergeschoss", "untergeschoss"],
        "units": [],
        "value_type": "integer",
        "keywords": ["max", "maximal"]
    },
    "density": {
        "patterns": ["ausnützungsziffer", "az", "ausnützung"],
        "units": ["%", "prozent"],
        "value_type": "numeric",
        "keywords": ["max", "maximal"]
    },
    "building_coverage": {
        "patterns": ["überbauungsziffer", "überbauungsziffer max", "uz"],
        "units": ["%", "prozent"],
        "value_type": "numeric",
        "keywords": ["max", "maximal"]
    },
    "building_mass_index": {
        "patterns": ["baumassenziffer", "bmz"],
        "units": [],
        "value_type": "numeric",
        "keywords": ["max", "maximal"]
    },
    "green_space_index": {
        "patterns": ["grünflächenziffer", "gfz"],
        "units": ["%", "prozent"],
        "value_type": "numeric",
        "keywords": ["min", "mindestens"]
    },
    "boundary_distance": {
        "patterns": ["grenzabstand", "grundabstand", "abstand"],
        "units": ["m", "meter", "metern"],
        "value_type": "numeric",
        "keywords": ["min", "mindestens", "max", "maximal"]
    },
    "boundary_distance_length_surcharge": {
        "patterns": ["mehrlängenzuschlag", "längenzuschlag"],
        "units": [],
        "value_type": "fraction",  # e.g., "1/3", "1/5"
        "keywords": []
    },
    "boundary_distance_max": {
        "patterns": ["höchstmass", "höchstmass grenzabstand", "höchstmass abstand"],
        "units": ["m", "meter"],
        "value_type": "numeric",
        "keywords": ["max", "maximal"]
    },
    "building_length": {
        "patterns": ["gebäudelänge"],
        "units": ["m", "meter"],
        "value_type": "numeric",
        "keywords": ["min", "mindestens", "max", "maximal"]
    },
    "building_width": {
        "patterns": ["gebäudebreite"],
        "units": ["m", "meter"],
        "value_type": "numeric",
        "keywords": ["min", "mindestens", "max", "maximal"]
    },
    "residential_area_share": {
        "patterns": ["wohnflächenanteil", "wohnanteil"],
        "units": ["%", "prozent"],
        "value_type": "numeric",
        "keywords": ["min", "mindestens", "max", "maximal"]
    }
}


def get_rule_taxonomy() -> dict:
    """Get the rule taxonomy dictionary."""
    return RULE_TAXONOMY


def get_rule_types() -> list:
    """Get list of all rule types."""
    return list(RULE_TAXONOMY.keys())


def get_rule_patterns(rule_type: str) -> list:
    """Get patterns for a specific rule type."""
    return RULE_TAXONOMY.get(rule_type, {}).get("patterns", [])


def get_rule_units(rule_type: str) -> list:
    """Get units for a specific rule type."""
    return RULE_TAXONOMY.get(rule_type, {}).get("units", [])
