"""BaseMaterials – Principled-BSDF-Werte aus einer CSV-Bibliothek anwenden und speichern.

Der Code ist in Module aufgeteilt:
    material.py   – Datenmodell + zentrale Spaltendefinition (FIELDS)
    csv_io.py     – CSV lesen/schreiben + gemeinsame BSDF-Auslesungslogik
    migration.py  – automatische Umwandlung alter v1.4-CSVs (seit 1.6)
    previews.py   – Vorschaubilder + Hintergrund-Rendering (seit 1.6)
    bake_ao.py    – Bake AO & Bevel, integriert (seit 1.6)
    tracking/     – Object-Tracking-Viewport-HUD, aus CamSplitter (seit 1.6)
    operators.py  – alle Operatoren
    ui.py         – Panels und Preferences
"""

import bpy

from . import bake_ao
from . import csv_io
from . import previews
from . import tracking
from .material import material_manager
from .operators import OPERATOR_CLASSES
from .ui import UI_CLASSES

CLASSES = (*OPERATOR_CLASSES, *UI_CLASSES)


def register():
    csv_io.reload()
    for cls in CLASSES:
        bpy.utils.register_class(cls)

    # Beide dynamisch: neue Kategorien/Materialien erscheinen ohne Neustart.
    bpy.types.Scene.material_category = bpy.props.EnumProperty(
        name="Category", items=previews.kategorie_enum_items)
    bpy.types.Scene.basematerials_preview = bpy.props.EnumProperty(
        name="Material", items=previews.material_enum_items)

    # Getrennt abgesichert: Kollidiert z. B. das alte Standalone-"Bake AO"-
    # Add-on (gleiche IDs), fehlt nur dieser Baustein - der Rest laeuft weiter.
    try:
        bake_ao.register_bake_ao()
    except Exception as fehler:
        print("BaseMaterials: Bake AO & Bevel nicht registriert - laeuft das "
              f"alte Standalone-Add-on noch? Bitte deaktivieren. ({fehler})")
    try:
        tracking.register_tracking()
    except Exception as fehler:
        print(f"BaseMaterials: Object Tracking nicht registriert: {fehler}")


def unregister():
    try:
        tracking.unregister_tracking()
    except Exception:
        pass
    try:
        bake_ao.unregister_bake_ao()
    except Exception:
        pass

    for cls in reversed(CLASSES):
        bpy.utils.unregister_class(cls)

    if hasattr(bpy.types.Scene, 'material_category'):
        del bpy.types.Scene.material_category
    if hasattr(bpy.types.Scene, 'basematerials_preview'):
        del bpy.types.Scene.basematerials_preview
    previews.leere_cache()


if __name__ == "__main__":
    register()
