import { WalletTransactionViewModel } from './WalletTransactionViewModel';

export class LeagueWalletViewModel {
  balance: number;
  currency: string;
  totalRevenue: number;
  totalFees: number;
  totalWithdrawals: number;
  pendingPayouts: number;
  transactions: WalletTransactionViewModel[];
  canWithdraw: boolean;
  withdrawalBlockReason?: string;

  constructor(dto: {
    balance: number;
    currency: string;
    totalRevenue: number;
    totalFees: number;
    totalWithdrawals: number;
    pendingPayouts: number;
    transactions: WalletTransactionViewModel[];
    canWithdraw: boolean;
    withdrawalBlockReason?: string;
  }) {
    this.balance = dto.balance;
    this.currency = dto.currency;
    this.totalRevenue = dto.totalRevenue;
    this.totalFees = dto.totalFees;
    this.totalWithdrawals = dto.totalWithdrawals;
    this.pendingPayouts = dto.pendingPayouts;
    this.transactions = dto.transactions;
    this.canWithdraw = dto.canWithdraw;
    this.withdrawalBlockReason = dto.withdrawalBlockReason;
  }

  /** UI-specific: Formatted balance */
  get formattedBalance(): string {
    return `$${this.balance.toFixed(2)}`;
  }

  /** UI-specific: Formatted total revenue */
  get formattedTotalRevenue(): string {
    return `$${this.totalRevenue.toFixed(2)}`;
  }

  /** UI-specific: Formatted total fees */
  get formattedTotalFees(): string {
    return `$${this.totalFees.toFixed(2)}`;
  }

  /** UI-specific: Formatted pending payouts */
  get formattedPendingPayouts(): string {
    return `$${this.pendingPayouts.toFixed(2)}`;
  }

  /** UI-specific: Filtered transactions by type */
  getFilteredTransactions(type: 'all' | 'sponsorship' | 'membership' | 'withdrawal' | 'prize'): WalletTransactionViewModel[] {
    return type === 'all' ? this.transactions : this.transactions.filter(t => t.type === type);
  }
}