import { _decorator, Button, Component, EditBox, Label, Node } from 'cc'
import { WsClient } from '../network/wsclient'
import { WsConfig } from '../network/wsconfig'
import { PbHelper } from '../network/pbHelper'
import { ReqUserLogin, ServiceTypeId, MsgId, RspUserLogin } from '../network/pbExport'
import { EventType } from '../constant'
const { ccclass, property } = _decorator

@ccclass('loginPanel')
export class loginPanel extends Component {
  @property(EditBox)
  private usernameInput: EditBox = null // 用户名输入框
  @property(EditBox)
  private passwordInput: EditBox = null // 密码输入框
  @property(Label)
  private statusLable: Label = null // 状态提示标签
  @property(Button)
  private loginButton: Button = null // 登录按钮

  // 组件初始化完成后调用
  start() {
    this.loginButton.node.on(Button.EventType.CLICK, this.onLoginButtonClick, this)
    // 监听websocket消息事件
    window.addEventListener(EventType.Ws, this.onMessage.bind(this))
  }

  protected onDestroy(): void {
    window.removeEventListener(EventType.Ws, this.onMessage.bind(this))
  }

  // 登录按钮点击处理函数
  private async onLoginButtonClick() {
    const username = this.usernameInput.string.trim()
    if (!username) {
      this.statusLable.string = '请输入用户名'
      return
    }
    const pwd = this.passwordInput.string.trim()
    if (!pwd) {
      this.statusLable.string = '请输入密码'
      return
    }
    const ws = WsClient.Instance()
    console.log(typeof ws)
    if (!ws.IsConnected) {
      await ws.ConnectAsync(WsConfig.Address[1].Address[0])
      if (!ws.IsConnected) {
        this.statusLable.string = '连接网络失败'
        return
      }
    }

    console.log('登陆帐号:', username, '密码:', pwd)

    const req = new ReqUserLogin()
    req.username = username
    req.password = pwd
    req.version = '20250601123030'
    const buffer = ReqUserLogin.encode(req).finish()
    ws.Send(ServiceTypeId.STI_Login, MsgId.ReqUserLoginId, buffer)
  }

  private onMessage(event: CustomEvent) {
    try {
      const [msgid, buffer] = PbHelper.DecodeClient(event.detail)
      switch (msgid) {
        case MsgId.RspUserLoginId:
          const rsp = PbHelper.Decode(RspUserLogin, buffer)
          console.log('收到返回消息:', rsp)
        default:
        // console.log('收到非json消息:', event.detail)
      }
    } catch (error) {
      // console.log('解析错误失败:', error)
      console.log(PbHelper.Uint8ToHex(event.detail))
    }
  }

  update(deltaTime: number) {}
}
