using System;
using System.Threading.Tasks;
using Kill.Managers;
using Kill.Network;
using UnityEngine;
using UnityEngine.UI;
using Kill.UI.Pages;
using Kill.UI.Components;
namespace Kill.UI.Pages
{
///
/// 设备重命名页面
///
public class RenamePage : MonoBehaviour
{
[Header("输入组件")]
public InputField nameInput;
[Header("按钮")]
public Button confirmBtn;
public Button cancelBtn;
private string currentName;
private Action onConfirmCallback;
private int type = 0;//0设备重命名 1用户名重命名
///
/// 初始化页面
///
/// 当前名称
/// 确认回调,返回名称
/// 类型 0 重命名设备 1 用户名重命名
public void Init(string name, Action onConfirm, int type = 0)
{
currentName = name;
onConfirmCallback = onConfirm;
this.type = type;
// 初始化输入框
if (nameInput != null)
{
nameInput.text = name;
}
// 绑定按钮事件
if (confirmBtn != null)
confirmBtn.onClick.AddListener(OnConfirmClick);
if (cancelBtn != null)
cancelBtn.onClick.AddListener(OnCancelClick);
// 注册返回事件
UIManager.Instance.RegisterBackAction(Back);
}
///
/// 点击确认按钮
///
private async void OnConfirmClick()
{
string newName = nameInput != null ? nameInput.text.Trim() : "";
// 如果为空或名称没有变化,直接返回
if (string.IsNullOrEmpty(newName) || newName == currentName)
{
Back();
return;
}
// 显示加载中
LoadingUI.Show();
if (type == 0)
{
// 调用服务器接口修改设备名称
UpdateDeviceNameAsync(newName);
}
else if (type == 1)
{
// 调用服务器接口修改用户名
UpdateUserNameAsync(newName);
}
}
///
/// 调用服务器接口更新设备名称
///
private async void UpdateDeviceNameAsync(string newName)
{
try
{
// 构建请求数据
var requestData = new DeviceNameRequest
{
device_name = newName,
user_id = DataManager.Instance.userInfo.id,
device_sn = DataManager.Instance.selectedDevice.ble_mac
};
// 发送PUT请求
var response = await HttpRequestManager.Instance.Put("/api/v1/device/name", requestData);
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
LoadingUI.Hide();
// 回调新名称
onConfirmCallback?.Invoke(newName);
Back();
},
onError: null
);
}
catch (Exception ex)
{
Debug.LogError($"更新设备名称失败: {ex.Message}");
}
}
private async void UpdateUserNameAsync(string newName)
{
try
{
// 构建请求数据
var requestData = new UserNameRequest
{
username = newName
};
// 发送PUT请求
var response = await HttpRequestManager.Instance.Put("/api/v1/user/username", requestData);
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
LoadingUI.Hide();
// 回调新名称
onConfirmCallback?.Invoke(newName);
Back();
},
onError: null
);
}
catch (Exception ex)
{
Debug.LogError($"更新设备名称失败: {ex.Message}");
}
}
///
/// 点击取消按钮
///
private void OnCancelClick()
{
Back();
}
///
/// 返回/关闭页面
///
private void Back()
{
UIManager.Instance.ClearBackAction();
Destroy(gameObject);
}
private void OnDestroy()
{
// 移除事件监听
if (confirmBtn != null)
confirmBtn.onClick.RemoveListener(OnConfirmClick);
if (cancelBtn != null)
cancelBtn.onClick.RemoveListener(OnCancelClick);
}
}
///
/// 设备名称请求数据
///
[Serializable]
public class DeviceNameRequest
{
public string device_name;
public string user_id;
public string device_sn;
}
///
/// 更新用户名请求数据
///
[Serializable]
public class UserNameRequest
{
public string username;
}
}