import { WalletAccount } from '@/domain/aggregates';
import { RepositorySaveOptions } from '@/infrastructure/persistence/unit-of-work';

export interface IWalletAccountRepository {
  save(wallet: WalletAccount, options?: RepositorySaveOptions): Promise<WalletAccount>;
  findById(walletId: bigint, options?: RepositorySaveOptions): Promise<WalletAccount | null>;
  findByUserId(userId: bigint, options?: RepositorySaveOptions): Promise<WalletAccount | null>;
  findByAccountSequence(accountSequence: string, options?: RepositorySaveOptions): Promise<WalletAccount | null>;
  getOrCreate(accountSequence: string, userId: bigint, options?: RepositorySaveOptions): Promise<WalletAccount>;
  findByUserIds(userIds: bigint[]): Promise<Map<string, WalletAccount>>;
}

export const WALLET_ACCOUNT_REPOSITORY = Symbol('IWalletAccountRepository');
