""" Utilities for operating on Material objects. """

from typing import Dict, List
from .msh_material import *
from .msh_model import *


_RENDERTYPES_MAPPING = {
    "NORMAL_BF2": Rendertype.NORMAL,
    "SCROLLING_BF2": Rendertype.SCROLLING,
    "ENVMAPPED_BF2": Rendertype.ENVMAPPED,
    "ANIMATED_BF2": Rendertype.ANIMATED,
    "REFRACTION_BF2": Rendertype.REFRACTION,
    "BLINK_BF2": Rendertype.BLINK,
    "NORMALMAPPED_TILED_BF2": Rendertype.NORMALMAPPED_TILED,
    "NORMALMAPPED_ENVMAPPED_BF2": Rendertype.NORMALMAPPED_ENVMAPPED,
    "NORMALMAPPED_BF2": Rendertype.NORMALMAPPED,
    "NORMALMAPPED_TILED_ENVMAPPED_BF2": Rendertype.NORMALMAPPED_TILED_ENVMAP}


_REVERSE_RENDERTYPES_MAPPING = {val: key for (key, val) in _RENDERTYPES_MAPPING.items()}


def remove_unused_materials(materials: Dict[str, Material], 
                            models: List[Model]) -> Dict[str, Material]:
    """ Given a dictionary of materials and a list of models
        returns a dictionary containing only the materials that are used. """

    filtered_materials: Dict[str, Material] = {}

    for model in models:
        if model.geometry is None:
            continue

        for segment in model.geometry:
            if not segment.material_name:
                continue

            filtered_materials[segment.material_name] = materials[segment.material_name]

    return filtered_materials