#if UNITY_OPENHARMONY && !UNITY_EDITOR
using System;
using System.Runtime.InteropServices;

namespace Combo
{
    /// <summary>
    /// HttpDns 的 HarmonyOS 平台桥接——经 P/Invoke 调 NAPI 模块 <c>httpdns_bridge</c>
    /// （<c>Plugins/OpenHarmony/cpp/HttpDnsBridge.cpp</c>）。cpp 用 <c>napi_threadsafe_function</c>
    /// 把请求投递到 ArkTS（<c>ets/HttpDnsBridge.ets</c> 调腾讯 SDK），并以信号量阻塞等待异步
    /// Promise 结果（5s 超时），从而把腾讯鸿蒙 SDK 的异步接口收敛为同步调用。
    /// 签名与内存契约同 iOS，仅库名不同（iOS = __Internal，HarmonyOS = httpdns_bridge）。
    /// </summary>
    internal static class HttpDnsOpenHarmony
    {
        // 返回 IntPtr（而非 string）以显式管理内存：native 侧 strdup 分配，C# 读取后
        // 调 HttpDns_Free 释放，不依赖 Mono/IL2CPP 对字符串返回值的自动释放差异。
        [DllImport("httpdns_bridge")]
        private static extern IntPtr HttpDns_Resolve(string domain);

        [DllImport("httpdns_bridge")]
        private static extern void HttpDns_Free(IntPtr ptr);

        // 返回 0/1（用 int 而非 bool，规避跨 P/Invoke 的 bool ABI 差异）。
        [DllImport("httpdns_bridge")]
        private static extern int HttpDns_IsAvailable();

        internal static HttpDnsResult ResolveSync(string domain)
        {
            IntPtr ptr = HttpDns_Resolve(domain);
            if (ptr == IntPtr.Zero)
                return null;

            string raw = Marshal.PtrToStringAnsi(ptr);
            HttpDns_Free(ptr);

            return HttpDnsBridgeFormat.Parse(raw, domain);
        }

        internal static bool IsAvailable()
        {
            return HttpDns_IsAvailable() != 0;
        }
    }
}
#endif
