"""Actual loader environment regression; no model, RTSP, or GPU execution."""
import ctypes
import glob
import json
import os
from pathlib import Path
import subprocess

SDK = Path('/opt/nvidia/deepstream/deepstream')
plugin = SDK / 'lib/gst-plugins/libcontextra_rtp_time.so'
assert not glob.glob('/dev/nvidia*')
for item in os.environ.get('LD_LIBRARY_PATH', '').split(':'):
    if item:
        assert Path(item).resolve() != (SDK / 'lib').resolve(), 'SDK path masks RUNPATH regression'
assert not os.environ.get('LD_PRELOAD')
registry = Path(os.environ['GST_REGISTRY'])
assert not registry.exists(), 'Scanner must use a fresh registry'
dynamic = subprocess.check_output(['readelf', '-d', str(plugin)], text=True, timeout=5)
assert '(RUNPATH)' in dynamic and str(SDK / 'lib') in dynamic
dependencies = subprocess.check_output(['ldd', str(plugin)], text=True, timeout=10)
assert 'not found' not in dependencies, 'Unresolved plugin dependency'
assert 'libnvds_service_maker.so =>' in dependencies

# A separate scanner process must resolve dependencies before pyservicemaker import.
scan = subprocess.run(['gst-inspect-1.0', '--plugin', 'contextra_rtp_time'],
                      capture_output=True, text=True, timeout=25)
assert scan.returncode == 0, 'Fresh scanner discovery failed'
assert 'contextra_rtp_time' in scan.stdout
ctypes.CDLL(str(plugin), mode=os.RTLD_NOW)

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
found = Gst.Registry.get().find_plugin('contextra_rtp_time')
assert found is not None and not (found.flags & Gst.PluginFlags.BLACKLISTED)
assert Path(found.get_filename()).resolve() == plugin.resolve()
assert Gst.Plugin.load_file(str(plugin)) is not None
from sdk_rtsp_compose_probe import verify_source_composition
verify_source_composition()
assert not glob.glob('/dev/nvidia*')
print(json.dumps(dict(runpath=True, dependencies=True, fresh_scanner=True,
                     blacklisted=False, explicit_load=True, factory_attach=True, gpu_nodes=0)))
