"""Object-Tracking-Ansicht — aus CamSplitter uebernommen (seit BaseMaterials 1.6).

Viewport-HUD mit animierten Objekt-Rahmen (Oktagon-Look) und Infolabels.
Operator-IDs und die Szenen-Eigenschaft sind gegenueber CamSplitter
umbenannt (material.toggle_tracking / basematerials_tracking), damit beide
Add-ons gleichzeitig aktiv sein koennen.
"""

import bpy
from bpy.props import BoolProperty

from . import state
from .operators import BBOX_OT_toggle_gpu_bbox, BBOX_OT_update_gpu_bbox

TRACKING_CLASSES = (BBOX_OT_toggle_gpu_bbox, BBOX_OT_update_gpu_bbox)


@bpy.app.handlers.persistent
def _tracking_aus_beim_laden(dummy):
    """Beim Laden einer Datei ist die Tracking-Anzeige immer aus."""
    for scene in bpy.data.scenes:
        try:
            scene.basematerials_tracking = False
        except Exception:
            pass


def register_tracking():
    for cls in TRACKING_CLASSES:
        bpy.utils.register_class(cls)
    bpy.types.Scene.basematerials_tracking = BoolProperty(
        name="Object Tracking",
        description="Viewport-HUD mit animierten Objekt-Rahmen und Infolabels",
        default=False,
    )
    bpy.app.handlers.load_post.append(_tracking_aus_beim_laden)


def unregister_tracking():
    for handler in list(bpy.app.handlers.load_post):
        if getattr(handler, "__name__", "") == "_tracking_aus_beim_laden":
            bpy.app.handlers.load_post.remove(handler)
    # Offene Draw-Handler wegraeumen, sonst zeichnet ein toter Handler weiter
    for name in ("_bbox_handler", "_bbox_label_handler"):
        handle = getattr(state, name, None)
        if handle:
            try:
                bpy.types.SpaceView3D.draw_handler_remove(handle, 'WINDOW')
            except Exception:
                pass
            setattr(state, name, None)
    if hasattr(bpy.types.Scene, "basematerials_tracking"):
        del bpy.types.Scene.basematerials_tracking
    for cls in reversed(TRACKING_CLASSES):
        bpy.utils.unregister_class(cls)
