using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using Kill.Managers;
using Kill.Network;
using Kill.UI.Components;
using UnityEngine;
using UnityEngine.UI;
namespace Kill.UI.Pages
{
public class ShareDevicePage : MonoBehaviour
{
public InputField userIdInput;
public Button shareButton;
public ScanQRcode scanQRcode;
public Button backButton;
/// 待分享设备的蓝牙MAC(为空时取当前选中设备)
private string deviceMac;
/// 关闭页面时的回调(用于恢复上层页面的返回事件)
private Action onCloseAction;
///
/// 初始化
///
/// 设备蓝牙MAC(分享非选中设备时传入)
/// 关闭页面回调
public void Init(string deviceMac = null)
{
this.deviceMac = deviceMac;
}
private Action closeCallback;
void Start()
{
closeCallback=UIManager.Instance.GetBackAction();
UIManager.Instance.RegisterBackAction(Back);
backButton.onClick.RemoveAllListeners();
backButton.onClick.AddListener(Back);
userIdInput.text = "";
shareButton.onClick.RemoveAllListeners();
shareButton.onClick.AddListener(async () => await Share());
scanQRcode.OnQRCodeScanned += ScanOver;
}
public void BeginScan()
{
scanQRcode.scanType = ScanQRcode.ScanType.Other;
scanQRcode.gameObject.SetActive(true);
}
public void ScanOver(string scannedData)
{
userIdInput.text = scannedData;
scanQRcode.gameObject.SetActive(false);
}
public void Back()
{
if (closeCallback != null)
{
UIManager.Instance.RegisterBackAction(closeCallback);
}
else
UIManager.Instance.ClearBackAction();
Destroy(gameObject);
}
public async Task Share()
{
string targetUserId = userIdInput.text.Trim();
if (string.IsNullOrEmpty(targetUserId))
{
ToastUI.Show("100204");
return;
}
// 调用后端接口共享设备
LoadingUI.Show();
var requestData = new ShareDeviceRequest
{
device_sn = string.IsNullOrEmpty(deviceMac)
? DataManager.Instance.selectedDevice.ble_mac
: deviceMac,
target_user_id = targetUserId,
owner_id = DataManager.Instance.userInfo.id
};
try
{
var response = await NetworkCtrl.Instance.Post("/api/v1/device/share", requestData);
LoadingUI.Hide();
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
Debug.Log("设备共享成功");
ToastUI.Show("100205");
Back();
},
onError: (code, msg) =>
{
//610 重复分享
//404 用户不存在
//608 已达上限
switch(code)
{
case 404:
ToastUI.Show("100282");
break;
case 610:
ToastUI.Show("100299");
break;
case 608:
ToastUI.Show("100298");
break;
default:
ToastUI.Show("100282");
break;
}
}
);
}
catch (Exception ex)
{
LoadingUI.Hide();
Debug.LogError("设备共享失败: " + ex.Message);
}
}
}
}