import { Unknown } from "@core/common";
import { CoreServiceKeys, getContainer } from "@core/di";
import { AxiosHttpClient, NetworkResult } from "@core/network";
import { Auth, PasswordLoginRequest } from "@shared/types";
import { AuthNetworkDataSource } from "./AuthNetworkDataSource";

/**
 * @file 认证相关网络数据源实现类
 * @author Joker.X
 */
export class AuthNetworkDataSourceImpl implements AuthNetworkDataSource {
  /**
   * 刷新 Token
   * @param {Record<string, string>} params - 刷新参数
   * @returns {Promise<NetworkResult<Auth>>} 刷新后的认证信息
   */
  async refreshToken(params: Record<string, string>): Promise<NetworkResult<Auth>> {
    const httpClient = getContainer().resolve<AxiosHttpClient>(CoreServiceKeys.HttpClient);
    const rawResponse: Unknown = await httpClient.post<Unknown>("user/login/refreshToken", params);
    return new NetworkResult<Auth>(rawResponse);
  }

  /**
   * 密码登录实现
   * @param {PasswordLoginRequest} params - 登录参数
   * @returns {Promise<NetworkResult<Auth>>} 登录结果
   */
  async loginByPassword(params: PasswordLoginRequest): Promise<NetworkResult<Auth>> {
    const httpClient = getContainer().resolve<AxiosHttpClient>(CoreServiceKeys.HttpClient);
    const rawResponse: Unknown = await httpClient.post<Unknown>("user/login/password", params);
    return new NetworkResult<Auth>(rawResponse);
  }
}