using System.Collections;
using System.Collections.Generic;
using Kill.Managers;
using Kill.Network;
using Kill.UI.Components;
using UnityEngine;
using UnityEngine.UI;
namespace Kill.UI.Pages
{
public class CheckPasswordPage : MonoBehaviour
{
class PasswordRequest
{
public string password;
}
public InputField passwordInput;
public Text errorText;
public GameObject plane;
// 未设置密码时的引导分支(仅在 passwordInput 等组件未挂时强制进入;正常面板同时具备输入与引导能力)
[Header("未设密码引导")]
public GameObject passwordCheckPanel; // 密码输入区域容器(含 InputField / 确认按钮等)
public GameObject passwordGuidePanel; // "引导去设置密码"提示区域容器
public Button setupPasswordBtn; // "立即设置密码" 按钮
public Button remindLaterBtn; // "稍后再说" 按钮
private void Awake()
{
if (setupPasswordBtn != null)
{
setupPasswordBtn.onClick.RemoveAllListeners();
setupPasswordBtn.onClick.AddListener(OnSetupPasswordClick);
}
if (remindLaterBtn != null)
{
remindLaterBtn.onClick.RemoveAllListeners();
remindLaterBtn.onClick.AddListener(OnRemindLaterClick);
}
}
public void OnEnable()
{
UIManager.Instance.RegisterBackAction(OnBack);
errorText.text="";
// 检测当前账号是否已设置过密码,决定显示密码输入面板还是引导面板
RefreshByPasswordState();
}
///
/// 根据 userInfo 的密码标记切换显示:
/// 未设密码 → 始终显示引导面板(不显示密码输入框,避免用户输什么都是错的)
/// 已设密码 → 显示密码输入面板
/// 简单策略:未设密码时,每次 LockButtonPlane 激活都弹引导,不再用本地日期去重
///
private void RefreshByPasswordState()
{
bool hasPassword = DataManager.Instance != null && DataManager.Instance.HasAnyPassword();
if (passwordGuidePanel != null) passwordGuidePanel.SetActive(!hasPassword);
if (passwordCheckPanel != null) passwordCheckPanel.SetActive(hasPassword);
}
public async void OnConfirm()
{
errorText.text="";
LoadingUI.Show();
try
{
string password = passwordInput != null ? passwordInput.text : "";
if (string.IsNullOrEmpty(password))
{
errorText.text = LanguageManager.Instance.GetLanguage("home_password_check_failed");
return;
}
PasswordRequest requestData=new PasswordRequest
{
password=passwordInput.text
};
var response = await NetworkCtrl.Instance.Post("/api/v1/auth/password/verify", requestData);
if (response != null && response.Data != null && response.Data.code == 200)
{
plane.SetActive(false);
gameObject.SetActive(false);
errorText.text="";
passwordInput.text="";
// 解锁成功,记录解锁时间(自动锁定倒计时起点)
DataManager.Instance.RecordUnlock();
}
else
{
errorText.text = LanguageManager.Instance.GetLanguage("home_password_check_failed");
passwordInput.text="";
}
}
catch (System.Exception ex)
{
Debug.LogError($"[CheckPasswordPage] 校验密码异常: {ex.Message}");
errorText.text = LanguageManager.Instance.GetLanguage("home_password_check_failed");
if (passwordInput != null) passwordInput.text = "";
}
finally
{
// 无论成功/失败/异常都关闭 Loading,避免一直挂着
LoadingUI.Hide();
}
}
///
/// 引导面板 - 立即设置密码
/// 关闭当前 LockButtonPlane 并打开个人中心的 设置密码 流程
///
public void OnSetupPasswordClick()
{
OnSetPassword();
}
public SelfVerificationCodePanel verificationCodePanelPrefab;
public SelfSetPasswordPanel setPasswordPanelPrefab;
SelfVerificationCodePanel verificationCodePanel;
public void OnSetPassword()
{
verificationCodePanel = Instantiate(verificationCodePanelPrefab, transform);
verificationCodePanel.Init(OnSureVerificationCode, OnBack);
}
SelfSetPasswordPanel setPasswordPanel;
public void OnSureVerificationCode()
{
Destroy(verificationCodePanel.gameObject);
setPasswordPanel = Instantiate(setPasswordPanelPrefab, transform);
setPasswordPanel.Init(OnSetPasswordSuccess);
}
public void OnSetPasswordSuccess()
{
Destroy(setPasswordPanel.gameObject);
plane.SetActive(false);
gameObject.SetActive(false);
// 解锁成功,记录解锁时间(自动锁定倒计时起点)
DataManager.Instance.RecordUnlock();
}
///
/// 引导面板 - 稍后再说
/// 仅关闭 LockButtonPlane,下次再激活时仍会再次弹出引导面板(未设密码时每次都提示)
///
public void OnRemindLaterClick()
{
gameObject.SetActive(false);
}
public void OnBack()
{
UIManager.Instance.RegisterBackAction(null);
gameObject.SetActive(false);
}
}
}