//
//  AccreditLoginHandler.swift
//  ylgamehall
//
//  H5 → Native handler：accreditlogin — 微信授权登录
//  契约：docs/H5-Native-Contract.md §3.1 ［1］ + §3.2 ［10］sharelogin
//
//  完整链路（Phase 4.E）：
//    1. WeChatAuth.authorize() → 拉起微信授权 + 客户端直拼 oauth2 + userinfo
//       (msext NewRootVC.m:2415-2428 等价路径，沿用 AppID/AppSecret/scope)
//    2. bridge.call("sharelogin", data: 7 字段) 反向 callback
//       字段名严格 1:1 含历史包袱：`Province` 大写 P / `city` 经 danbian 去单引号
//
//  ⚠️ canImport(WechatOpenSDK) 守卫：SDK 未链接前走 stub（与 Phase 4.A 一致），
//  仅响应 callback 不触发 sharelogin；项目方在 Xcode Embed & Sign 后真实路径激活。
//

import Foundation

public enum AccreditLoginHandler {

    public static func register(on bridge: any BridgeProtocol) {
        bridge.register("accreditlogin") { _, callback in
            callback?(.string("Response from accreditlogin"))

            // 拉起微信授权 → 拿 7 字段 → 反向 callback sharelogin
            Task { @MainActor in
                do {
                    let user = try await WeChatAuth.authorize()
                    bridge.call("sharelogin", data: .object([
                        // 字段名严格 1:1 contract §3.2 表 [10] / msext NewRootVC.m:2428
                        "openid":     .string(user.openid),
                        "headimgurl": .string(user.headimgurl),
                        "nickname":   .string(user.nickname),
                        "sex":        .number(Double(user.sex)),
                        "city":       .string(user.city),
                        "Province":   .string(user.Province),    // ← 大写 P
                        "unionid":    .string(user.unionid)
                    ]), callback: nil)
                } catch WeChatAuthError.userCancelled {
                    // msext 行为：用户取消不弹 alert、不触发 sharelogin
                } catch {
                    // 其它失败也吞下（msext 同款乐观策略：不反向通知 H5）
                }
            }
        }
    }
}
