[
  {
    "case": "normal_rtp_96_percent",
    "input": {
      "bet_amount": 10,
      "mode": "rtp",
      "value_percent": 96,
      "rounds": 100,
      "source_type": "provider",
      "rounds_per_hour": 300,
      "session_minutes": 60
    },
    "expected": {
      "rtp": "96.00%",
      "house_edge": "4.00%",
      "expected_loss_per_bet": "$0.40",
      "expected_loss_total": "$40.00",
      "expected_loss_per_hour": "$120.00",
      "session_expected_loss": "$120.00",
      "theoretical_return": "$960.00",
      "total_wagered": "$1000.00",
      "source_confidence": "Higher"
    }
  },
  {
    "case": "house_edge_mode_2_70_percent",
    "input": {
      "bet_amount": 5,
      "mode": "edge",
      "value_percent": 2.7,
      "rounds": 200,
      "source_type": "regulator"
    },
    "expected": {
      "rtp": "97.30%",
      "house_edge": "2.70%",
      "expected_loss_per_bet": "$0.14",
      "expected_loss_total": "$27.00",
      "expected_loss_per_hour": "$40.50",
      "theoretical_return": "$973.00",
      "total_wagered": "$1000.00",
      "source_confidence": "Higher"
    }
  },
  {
    "case": "low_confidence_generic_article_source",
    "input": {
      "bet_amount": 2.5,
      "mode": "rtp",
      "value_percent": 94.5,
      "rounds": 500,
      "source_type": "article"
    },
    "expected": {
      "house_edge": "5.50%",
      "expected_loss_total": "$68.75",
      "source_confidence": "Low"
    }
  },
  {
    "case": "unknown_source_stop_warning",
    "input": {
      "bet_amount": 10,
      "mode": "rtp",
      "value_percent": 96,
      "rounds": 100,
      "source_type": "unknown"
    },
    "expected": {
      "source_confidence": "Do not rely yet",
      "warning": "Do not rely on it as evidence until the RTP source is visible"
    }
  },
  {
    "case": "invalid_zero_bet",
    "input": {
      "bet_amount": 0,
      "mode": "rtp",
      "value_percent": 96,
      "rounds": 100
    },
    "expected": {
      "error": "Enter a bet amount above zero"
    }
  },
  {
    "case": "invalid_rtp_100_percent",
    "input": {
      "bet_amount": 10,
      "mode": "rtp",
      "value_percent": 100,
      "rounds": 100
    },
    "expected": {
      "error": "RTP must be greater than 0 and less than 100"
    }
  },
  {
    "case": "invalid_zero_rounds",
    "input": {
      "bet_amount": 10,
      "mode": "rtp",
      "value_percent": 96,
      "rounds": 0
    },
    "expected": {
      "error": "Enter at least one round"
    }
  },
  {
    "case": "source_verifier_higher_confidence",
    "input": {
      "source_type": "provider",
      "source_date": "2026-05-18",
      "game_title": "visible title",
      "version_label": "visible version",
      "operator_lobby": "visible operator",
      "market_jurisdiction": "visible market",
      "paytable_visible": true,
      "multiple_rtp_versions": "no"
    },
    "expected": {
      "source_verifier_confidence": "Higher confidence",
      "required_evidence": "Save title, provider, source date, version label, operator/market context and RTP/paytable screenshot"
    }
  },
  {
    "case": "source_verifier_do_not_rely",
    "input": {
      "source_type": "unknown",
      "source_date": "",
      "game_title": "",
      "version_label": "",
      "operator_lobby": "",
      "market_jurisdiction": "",
      "paytable_visible": false,
      "multiple_rtp_versions": "unclear"
    },
    "expected": {
      "source_verifier_confidence": "Do not rely yet",
      "required_evidence": [
        "Find a visible provider, paytable, operator or regulator source",
        "Resolve multiple RTP versions"
      ]
    }
  },
  {
    "case": "hourly_mode_96_percent_300_spins_60_minutes",
    "input": {
      "bet_amount": 10,
      "mode": "rtp",
      "value_percent": 96,
      "rounds": 100,
      "source_type": "provider",
      "rounds_per_hour": 300,
      "session_minutes": 60
    },
    "expected": {
      "expected_loss_per_hour": "$120.00",
      "session_expected_loss": "$120.00",
      "session_total_wagered": "$3000.00",
      "pace_warning": "Review pace before play"
    }
  },
  {
    "case": "european_roulette_preset",
    "input": {
      "preset": "euroRoulette"
    },
    "expected": {
      "mode": "edge",
      "value_percent": 2.7,
      "rtp": "97.30%",
      "source_type": "article",
      "source_confidence": "Low"
    }
  },
  {
    "case": "keno_high_exposure_warning",
    "input": {
      "bet_amount": 5,
      "mode": "rtp",
      "value_percent": 75,
      "rounds": 100,
      "rounds_per_hour": 600,
      "session_minutes": 180,
      "source_type": "article"
    },
    "expected": {
      "expected_loss_per_bet": "$1.25",
      "session_expected_loss": "$2250.00",
      "pace_warning": "High exposure"
    }
  },
  {
    "case": "evidence_packet_copy",
    "input": {
      "game_title": "visible title",
      "provider": "visible provider",
      "source_url_or_text": "rules screen",
      "version_label": "operator/version label"
    },
    "expected": {
      "includes": [
        "RTP evidence packet",
        "Screenshot checklist",
        "Private-data warning"
      ]
    }
  },
  {
    "case": "bonus_contribution_handoff",
    "input": {
      "bonus_terms_affect_games": true
    },
    "expected": {
      "route": [
        "/tools/wagering/",
        "/tools/bonus/",
        "/playbook/basics/glossary/bonus-terms/"
      ]
    }
  },
  {
    "case": "slots_handoff_url",
    "input": {
      "copy_slots_handoff_url": true,
      "rtp": 96,
      "house_edge": 4,
      "bet_amount": 10,
      "rounds_per_hour": 300,
      "session_minutes": 60
    },
    "expected": {
      "url": "/tools/slots/?rtp=96.00&edge=4.00&bet=10&rph=300&minutes=60",
      "query_parameters": "assumptions only",
      "canonical": "/tools/slots/"
    }
  },
  {
    "case": "share_url_canonical_policy",
    "input": {
      "copy_share_url": true
    },
    "expected": {
      "query_parameters": "assumptions only",
      "canonical": "/tools/rtp/"
    }
  }
]
