import type { ReferralEarnSourceType } from './events.js';

export type ReferralEffect =
  | {
      kind: 'write-zero-commission-audit';
      referralId: string;
      referrerUserId: string;
      purchaseId: string;
      sourceType: ReferralEarnSourceType;
      memo: 'fraud:block';
      at: Date;
    }
  | { kind: 'set-quarantined-at'; referralId: string; at: Date }
  | {
      kind: 'qualify-referee-first-paid';
      refereeUserId: string;
      purchaseId: string;
      amountPaidAgorot: number;
    }
  | {
      kind: 'accrue-affiliate-commission';
      refereeUserId: string;
      purchaseId: string;
      amountPaidAgorot: number;
      orderLineId?: string;
    }
  | {
      kind: 'enqueue-qualified-notification';
      referralId: string;
      referrerUserId: string;
      refereeUserId: string;
      purchaseId: string;
      rewardAgorot: number;
    }
  | { kind: 'execute-clawback'; purchaseId: string; refundEventId: string; refundFraction: number };
