import Foundation

// 可选：定义响应模型（根据你的实际返回结构调整）
//struct LoginResponse: Codable {
//    let code: Int?
//    let message: String?
//    let  [String: AnyCodable]? // 或具体结构，如 token, userId 等
//}

// 因为 Dictionary<String, Any> 不能直接 Codable，这里用 AnyCodable 简化
//enum AnyCodable: Codable {}

func passwordLogin(username: String, password: String) {
    guard let url = URL(string: "http://192.168.31.156:31646/api/v1/iam/login/password-login") else {
        print("❌ 无效的URL")
        return
    }

    // 1. 创建 URLRequest
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    
    // 2. 设置请求头
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    // 如果接口需要，也可以加 User-Agent 或其他 header
    request.setValue("iOS App", forHTTPHeaderField: "User-Agent")

    // 3. 准备参数
    let parameters = [
        "account": username,
        "password": password
    ]

    // 4. 将参数编码为 JSON
    do {
        request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
    } catch {
        print("❌ 参数序列化失败: \(error)")
        return
    }

    // 5. 发送请求
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        // 回调在后台线程，更新 UI 需切主线程
        DispatchQueue.main.async {
            if let error = error {
                print("网络错误: \(error)")
                return
            }

            // 检查状态码
            if let httpResponse = response as? HTTPURLResponse {
                print("状态码: \(httpResponse.statusCode)")
                
                if httpResponse.statusCode == 404 {
                    print("⚠️ 接口未找到，请确认：")
                    print("1. 后端服务是否正在运行？")
                    print("2. IP 和端口是否正确？")
                    print("3. 网络是否在同一局域网？")
                    return
                } else if httpResponse.statusCode != 200 {
                    print("服务器错误: \(httpResponse.statusCode)")
                }
            }

            // 处理返回数据
            guard let data = data else {
                print("❌ 无返回数据")
                return
            }

            // 打印原始响应（调试用）
            if let jsonString = String(data: data, encoding: .utf8) {
                print("响应内容: \(jsonString)")
            }

            // 尝试解析为 JSON 字典
            do {
                if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
                    print("解析成功: \(json)")
                    
                    // 如果你有明确的模型，可以用 JSONDecoder 解码 LoginResponse
                    // let decoder = JSONDecoder()
                    // let loginResult = try decoder.decode(LoginResponse.self, from: data)
                }
            } catch {
                print("❌ JSON 解析失败: \(error)")
            }
        }
    }

    // 启动请求
    task.resume()
}
