import common from "@ohos.app.ability.common";
import { IAccountStoreRepository } from "@shared/contracts";
import { AccountStoreDataSource } from "./datasource/AccountStoreDataSource";
import { AccountStoreDataSourceImpl } from "./datasource/AccountStoreDataSourceImpl";

/**
 * @file 账号密码本地存储仓库,封装存取逻辑
 * @author Joker.X
 */
export class AccountStoreRepositoryImpl implements IAccountStoreRepository {
  /**
   * 本地数据源实例
   */
  private dataSource: AccountStoreDataSource;

  /**
   * 构造函数
   * @param {common.Context} [context] UIAbility 上下文
   * @param {AccountStoreDataSource} [dataSource] 可选自定义数据源
   */
  constructor(context?: common.Context, dataSource?: AccountStoreDataSource) {
    this.dataSource = dataSource ?? new AccountStoreDataSourceImpl(context);
  }

  /**
   * 保存账号
   * @param {string} account 用户账号
   * @returns {Promise<void>} Promise<void>
   */
  saveAccount(account: string): Promise<void> {
    return this.dataSource.setAccount(account);
  }

  /**
   * 读取账号
   * @returns {Promise<string>} 用户账号,默认空字符串
   */
  loadAccount(): Promise<string> {
    return this.dataSource.getAccount();
  }

  /**
   * 保存密码
   * @param {string} password 用户密码
   * @returns {Promise<void>} Promise<void>
   */
  savePassword(password: string): Promise<void> {
    return this.dataSource.setPassword(password);
  }

  /**
   * 读取密码
   * @returns {Promise<string>} 用户密码,默认空字符串
   */
  loadPassword(): Promise<string> {
    return this.dataSource.getPassword();
  }
}