import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:get_it/get_it.dart'; import '../../../../core/logging/i_logger_service.dart'; import '../../../../core/storage/user_storage.dart'; class RemoteHttpDatasource { final Dio _dio; final UserStorage _userStorage; // 🔥 新增字段 final ILoggerService _logger = GetIt.I(); RemoteHttpDatasource(this._dio, this._userStorage); /// 示例:获取控制授权 (对应之前逻辑中的权限申请) /* Future> requestControlAuth(String robotId) async { try { final response = await _dio.post( '/robot/auth/request', data: {'robotId': robotId}, ); return response.data; } catch (e) { rethrow; } }*/ /// 🔥 返回完整权限信息: {hasPermission, owner} Future> requestRemoteControlViaHttp(String deviceName, String platform) async { print(deviceName+"@@@"); final user = await _userStorage.getUser(); if (user == null) { debugPrint('❌ [RemoteHttp] 用户未登录,无法请求远程控制权限'); _logger.log('❌ [RemoteHttp] 用户未登录,无法请求远程控制权限'); return {'hasPermission': false, 'owner': null}; } final token = user.token; debugPrint('🔑 [RemoteHttp] 开始请求远程控制权限 - deviceName: $deviceName, platform: $platform'); _logger.log('🔑 [RemoteHttp] 开始请求远程控制权限 - deviceName: $deviceName, platform: $platform'); try { debugPrint('📡 [RemoteHttp] 正在发送 HTTP POST 请求到 /forward/device/remoteControl'); debugPrint('📡 [RemoteHttp] 请求参数: deviceId=$deviceName, platform=$platform'); final response = await _dio.post( '/forward/device/remoteControl', options: Options( headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ${token}', }, ), data: {'deviceId': deviceName, 'platform': platform}); debugPrint('📥 [RemoteHttp] HTTP 请求已发送,等待响应...'); debugPrint("📊 [RemoteHttp] HTTP响应状态码: ${response.statusCode}"); _logger.log("📊 [RemoteHttp] HTTP响应状态码: ${response.statusCode}"); final responseData = response.data as Map; debugPrint("📊 [RemoteHttp] 完整响应数据:$responseData"); _logger.log("📊 [RemoteHttp] 完整响应数据:$responseData"); // 🔥 关键:先获取响应的 data 字段,再获取 remoteControl 和 owner final dataField = responseData['data'] as Map?; if (dataField != null) { final bool hasRemoteControl = dataField['remoteControl'] as bool? ?? false; final String? owner = dataField['owner'] as String?; debugPrint("✅ [RemoteHttp] 解析成功 - remoteControl=$hasRemoteControl, owner=$owner"); _logger.log("✅ [RemoteHttp] 解析成功 - remoteControl=$hasRemoteControl, owner=$owner"); // 🔥 返回完整权限信息 return {'hasPermission': hasRemoteControl, 'owner': owner}; } else { debugPrint("❌ [RemoteHttp] 缺少 data 字段,响应结构异常"); _logger.log("❌ [RemoteHttp] 缺少 data 字段,响应结构异常"); return {'hasPermission': false, 'owner': null}; } } catch (e) { debugPrint('❌ [RemoteHttp] 请求远程控制权限失败:$e'); _logger.log('❌ [RemoteHttp] 请求远程控制权限失败:$e'); return {'hasPermission': false, 'owner': null}; } } ///app退出远程控制后释放权限 Future releaseRemoteControlViaHttp( String platform) async { // _logger.logWithLevel("app退出远程控制后释放权限 开始"); final user = await _userStorage.getUser(); if (user == null) { return false; } final token = user.token; final response = await _dio.post( '/forward/device/releaseControl', options: Options( headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ${token}', }, ), data: {'platform': "app",'type':2}); try { final responseData = response.data as Map; //debugPrint("📊 [HTTP 响应] 完整数据:$responseData"); //_logger.log("releaseRemoteControlViaHttp 响应] 完整数据:$responseData"); if(responseData['code']==200){ // _logger.logWithLevel("app退出远程控制后释放权限 成功"); return true; } return false; } catch (e) { // debugPrint('❌ [RemoteHttp] 解析响应失败:$e'); _logger.log('❌ [RemoteHttp] 解析响应失败:$e'); return false; } } }