#import <Network/Network.h>

// cdropTriggerLocalNetwork：起一个对 _cdrop._tcp 的 Bonjour 浏览，触发 macOS 本地网络权限弹窗。
// WKWebView 自身不会触发该权限请求，须由宿主 App 主动发起一次本地网络访问；授权后本进程内的
// WebRTC 才能收集 host / mDNS 候选实现同内网直连（见 localnetwork_darwin.go 注释）。浏览结果本身
// 不关心——「发起访问」这一动作即触发授权。保活单个 browser（静态全局，ARC 下持有），幂等。
static nw_browser_t gCdropBrowser = nil;

void cdropTriggerLocalNetwork(void) {
    if (gCdropBrowser != nil) {
        return;
    }
    nw_browse_descriptor_t descriptor =
        nw_browse_descriptor_create_bonjour_service("_cdrop._tcp", NULL);
    nw_parameters_t parameters = nw_parameters_create();
    nw_parameters_set_include_peer_to_peer(parameters, true);

    nw_browser_t browser = nw_browser_create(descriptor, parameters);
    nw_browser_set_queue(browser, dispatch_get_main_queue());
    nw_browser_set_browse_results_changed_handler(
        browser, ^(nw_browse_result_t old_result, nw_browse_result_t new_result, bool batch_complete) {
            // 不关心结果；浏览动作本身即触发权限请求。
        });
    nw_browser_set_state_changed_handler(
        browser, ^(nw_browser_state_t state, nw_error_t error) {
            // 进入 failed/cancelled 时释放，允许下次重试。
            if (state == nw_browser_state_failed || state == nw_browser_state_cancelled) {
                gCdropBrowser = nil;
            }
        });
    gCdropBrowser = browser;
    nw_browser_start(browser);
}
