import { BaseViewModel } from "@core/base";
import { CoreServiceKeys, getContainer } from "@core/di";
import { NavigationService } from "@core/navigation";
import { getUserState, UserState } from "@shared/state";

/**
 * @file 个人中心 ViewModel
 * @author Joker.X
 */
@ObservedV2
export default class ProfileViewModel extends BaseViewModel {
  /**
   * 全局用户状态
   */
  private readonly userState: UserState = getUserState();

  /**
   * 获取展示昵称
   * @returns {ResourceStr} 展示昵称
   */
  getDisplayNickName(): ResourceStr {
    const nickName: string = this.userState.getUserInfo().nickName?.trim() ?? "";
    return nickName.length > 0 ? nickName : $r("app.string.user_profile_nickname_empty");
  }

  /**
   * 获取展示用户 ID
   * @returns {ResourceStr} 展示用户 ID
   */
  getDisplayUserId(): ResourceStr {
    const userId: number = this.userState.getUserInfo().id ?? 0;
    return userId > 0 ? `${userId}` : $r("app.string.user_profile_id_empty");
  }

  /**
   * 获取展示手机号
   * @returns {ResourceStr} 展示手机号
   */
  getDisplayPhone(): ResourceStr {
    const phone: string = this.userState.getUserInfo().phone?.trim() ?? "";
    return phone.length > 0 ? phone : $r("app.string.user_profile_phone_empty");
  }

  /**
   * 执行退出登录
   * @returns {void} 无返回值
   */
  logout(): void {
    this.userState.logout();
    const navigation = getContainer().tryResolve<NavigationService>(CoreServiceKeys.NavigationService);
    navigation?.navigateBack();
  }
}