/**
 * @file 认证相关仓库类
 * @description 实现认证模块请求
 * @author JunBin.Yang
 */
import { NetworkResult } from "@core/network";
import { Auth, PasswordLoginRequest } from "@shared/types";
import { IAuthRepository } from "@shared/contracts";
import { AuthNetworkDataSource } from "./datasource/AuthNetworkDataSource";
import { AuthNetworkDataSourceImpl } from "./datasource/AuthNetworkDataSourceImpl";

/**
 * 认证仓库实现类
 * 实现 shared/contracts 中定义的 IAuthRepository 接口
 */
export class AuthRepositoryImpl implements IAuthRepository {
  /**
   * 认证网络数据源
   */
  private networkDataSource: AuthNetworkDataSource;

  /**
   * 构造函数
   * @param networkDataSource 可选的认证网络数据源实例
   */
  constructor(networkDataSource?: AuthNetworkDataSource) {
    this.networkDataSource = networkDataSource ?? new AuthNetworkDataSourceImpl();
  }

  /**
   * 刷新 Token
   * @param {Record<string, string>} params - 刷新参数
   * @returns {Promise<NetworkResult<Auth>>} 刷新后的认证信息
   */
  async refreshToken(params: Record<string, string>): Promise<NetworkResult<Auth>> {
    return this.networkDataSource.refreshToken(params);
  }

  /**
   * 密码登录
   * @param params 登录参数,包含用户名、密码等
   * @returns 包含认证信息的网络响应
   */
  async loginByPassword(params: PasswordLoginRequest): Promise<NetworkResult<Auth>> {
    return this.networkDataSource.loginByPassword(params);
  }
}