import axios, { type Response } from '@/utils/axios/axios';
// import { sha256 } from 'hash-wasm';

export const refreshTokenUrl = '/api/scs/v1/user/refresh-token';
export const loginUrl = '/api/scs/v1/user/login';
export const logoutUrl = '/api/scs/v1/user/logout';

export const tokenUrlWhiteList: string[] = [refreshTokenUrl, loginUrl];
/** 密码登录 */
export function passdLoginAxios(data: ReqUserLogin): Promise<Response<BriUserInfo>> {
  // data.pwd = await sha256(data.pwd);
  return axios.post<BriUserInfo, Response<BriUserInfo>>(loginUrl, data);
}
/** 退出登录 */
export function logoutAxios(): Promise<Response<null>> {
  // data.pwd = await sha256(data.pwd);
  return axios.post<null, Response<null>>(logoutUrl);
}
/** 刷新token */
export function refreshTokenAxios(refreshToken: string): Promise<Response<ReqRefreshToken>> {
  return axios.get<ReqRefreshToken, Response<ReqRefreshToken>>(refreshTokenUrl, { params: { refreshToken } });
}

export interface ReqUserLogin {
  /**
   * 编号
   */
  no: string;
  /**
   * 用户密码
   */
  pwd: string;
}

export interface ReqRefreshToken {
  /**
   * 用户ID
   */
  id?: number;
  /**
   * 刷新token
   */
  refreshToken: string;
  /**
   * 刷新token过期时间
   */
  refreshTokenExpired?: number;
  /**
   * token
   */
  token: string;
  /**
   * token过期时间(秒)
   */
  tokenExpired: number;

  /**
   * 签发时间
   */
  tokenTimestamp: number;
}

export interface BriUserInfo {
  /**
   * 头像
   */
  avatar?: string | null;
  /**
   * 用户id
   */
  id: number;
  /**
   * 用户名
   */
  name?: string | null;
  /**
   * 账号(编号)
   */
  no: string;
  /**
   * 电话
   */
  phone?: string | null;
  /**
   * 刷新token
   */
  refreshToken: string;
  /**
   * 刷新token过期时间
   */
  refreshTokenExpired: number;
  /**
   * 角色类别 (0:学生, 1:教师, 2:名师)
   */
  roleType: number;
  /**
   * 学校名称
   */
  schoolName: string;
  /**
   *学校ID
   */
  schoolId: number;
  /**
   * 性别
   */
  sex: number;
  /**
   * token
   */
  token: string;
  /**
   * token过期时间(秒)
   */
  tokenExpired: number;

  /**
   * 签发时间
   */
  tokenTimestamp: number;
}
