#if UNITY_EDITOR_OSX
using System;
using Aidlab.BLE;
using UnityEditor;
using UnityEngine;

namespace Aidlab.Editor
{
    [InitializeOnLoad]
    public static class MacBleEditorCleanup
    {
        static MacBleEditorCleanup()
        {
            AssemblyReloadEvents.beforeAssemblyReload += StopBleSafely;
            EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
        }

        private static void OnPlayModeStateChanged(PlayModeStateChange state)
        {
            if (state == PlayModeStateChange.ExitingEditMode || state == PlayModeStateChange.ExitingPlayMode)
            {
                StopBleSafely();
            }
        }

        private static void StopBleSafely()
        {
            try
            {
                foreach (var sdk in Resources.FindObjectsOfTypeAll<global::Aidlab.AidlabSDK>())
                {
                    try
                    {
                        sdk.ShutdownTransport();
                    }
                    catch (Exception)
                    {
                        // Best-effort cleanup only.
                    }
                }
                MacBLEApi.Stop();
            }
            catch (DllNotFoundException)
            {
                // Plugin not loaded (or wrong platform) – ignore.
            }
            catch (Exception)
            {
                // Best-effort cleanup only; never block domain reload.
            }
        }
    }
}
#endif
