// lib/services/review_prompt_policy.dart

/// Decides — as pure logic, with no plugin or storage dependency — whether the
/// app should ask the player for a store review right now.
///
/// Store review prompts only land when they catch the player at a genuine high
/// point, and both OSes hard-throttle how often the native sheet can appear.
/// So we ask at most once (the caller persists [alreadyRequested]), and only
/// after a clean, high-scoring win once the player is clearly invested.
class ReviewPromptPolicy {
  const ReviewPromptPolicy({
    this.minStagesWon = 5,
    this.requiredStars = 3,
  });

  /// How many stages the player must have cleared before we'll ask, so the
  /// prompt never interrupts a newcomer still deciding if they like the game.
  final int minStagesWon;

  /// The star count the triggering win must reach — a top-marks finish is the
  /// emotional peak we want to ride.
  final int requiredStars;

  /// True when a just-finished stage result should trigger the review prompt.
  /// [alreadyRequested] is the persisted one-time guard owned by the caller.
  bool shouldRequest({
    required bool alreadyRequested,
    required bool won,
    required int stars,
    required int totalStagesWon,
  }) {
    if (alreadyRequested) return false;
    if (!won) return false;
    if (stars < requiredStars) return false;
    if (totalStagesWon < minStagesWon) return false;
    return true;
  }
}
