/**
 * Review domain events — discriminated union (FDS §6.9).
 *
 *   REVIEW_ELIGIBLE + standard_review_submitted → REVIEWED
 *     effects: [insert-review, update-vendor-aggregate, send-vendor-push]
 *
 *   EXPIRED_UNREDEEMED + technical_review_submitted → TECHNICAL_REVIEWED
 *     effects: [insert-review]  (no aggregate update — technical does not affect score)
 *
 *   EXISTING_REVIEW + reply_added → REVIEW_REPLIED
 *     effects: [update-review-reply]
 *
 *   EXISTING_REVIEW + removal_requested → REVIEW_REMOVAL_PENDING
 *     effects: [mark-review-removal-requested, insert-removal-queue, enqueue-ai-prescore?]
 *
 * Pure module: no imports from @/server/db, do-client, outbox-producer, payments, fetch.
 */

export type StandardReviewSubmittedEvent = {
  kind: 'standard_review_submitted';
  purchaseId: string;
  userId: string;
  vendorId: string;
  rating: number;
  body: string;
  at: Date;
};

export type TechnicalReviewSubmittedEvent = {
  kind: 'technical_review_submitted';
  purchaseId: string;
  userId: string;
  vendorId: string;
  body: string;
  at: Date;
};

export type ReplyAddedEvent = {
  kind: 'reply_added';
  reviewId: string;
  vendorId: string;
  reply: string;
  at: Date;
};

export type RemovalRequestedEvent = {
  kind: 'removal_requested';
  reviewId: string;
  vendorId: string;
  reason: string;
  at: Date;
};

export type ReviewEvent =
  | StandardReviewSubmittedEvent
  | TechnicalReviewSubmittedEvent
  | ReplyAddedEvent
  | RemovalRequestedEvent;
