import { type PaymentType } from '@prisma/client';
import { type DomainEvent } from '@modules/shared';

/**
 * Emitted when an admin manually confirms a VN bank transfer payment.
 *
 * Carries enough metadata for downstream consumers (audit logging,
 * subscription activation, accounting) without requiring a re-read
 * of the payment aggregate.
 */
export class BankTransferConfirmedEvent implements DomainEvent {
  readonly eventName = 'payment.bank_transfer_confirmed';
  readonly occurredAt = new Date();

  constructor(
    public readonly aggregateId: string,
    public readonly userId: string,
    public readonly type: PaymentType,
    public readonly amountVND: bigint,
    public readonly confirmedBy: string,
    public readonly bankReference: string | null,
  ) {}
}
