// HttpDnsBridge.mm — Unity C# 与 native ComboSDK 的 HttpDns 模块之间的薄桥接（#4）。
//
// 架构：腾讯 MSDKDns 的接入在 native 仓库 combo-sdk-ios 的 HttpDns 模块（HttpDns.swift）；
//   本桥只是 #3 resolve 的薄封装——调用 native 模块、把结果序列化为 Unity 约定格式。
//   bridge.mm 随 Unity 工程编入主程序，经静态链接的 ComboSDK 符号以 DllImport("__Internal") 暴露。
//
// 返回格式："ip4a,ip4b|ip6a,ip6b"（'|' 分隔 IPv4/IPv6 双栈，',' 分隔同族多 IP，空段=该族无结果）。
// 内存契约：HttpDns_Resolve 返回 strdup 分配的字符串，C# 读取后必须调 HttpDns_Free 显式释放。
// 初始化不在此处——由 native HttpDns 模块在进程启动（didFinishLaunching）时完成。

#import <ComboSDK/ComboSDK-Swift.h>
#import <Foundation/Foundation.h>

static NSString* JoinIPList(NSArray<NSString*>* list)
{
    return (list.count > 0) ? [list componentsJoinedByString:@","] : @"";
}

extern "C" {

/// 解析域名，返回 strdup 分配的 "ipv4|ipv6" C 字符串；失败/不可用返回 NULL。
/// 调用方（C#）须用 HttpDns_Free 释放。
const char* HttpDns_Resolve(const char* domain)
{
    if (!domain)
        return NULL;

    NSString* domainStr = [NSString stringWithUTF8String:domain];
    HttpDnsResult* result = [[HttpDns shared] resolve:domainStr];
    if (!result)
        return NULL;

    NSString* v4Part = JoinIPList(result.ipv4);
    NSString* v6Part = JoinIPList(result.ipv6);
    if (v4Part.length == 0 && v6Part.length == 0)
        return NULL;

    NSString* combined = [NSString stringWithFormat:@"%@|%@", v4Part, v6Part];
    return strdup([combined UTF8String]);
}

/// 释放 HttpDns_Resolve 返回的字符串。
void HttpDns_Free(const char* ptr)
{
    free((void*)ptr);
}

/// HTTPDNS 是否可用（凭据齐全 + 初始化成功）。返回 1=可用，0=不可用。
int HttpDns_IsAvailable(void)
{
    return [[HttpDns shared] isAvailable] ? 1 : 0;
}

}
