"""Modifier data constants for the poker modifier application."""

from __future__ import annotations

from typing import TypeAlias

Modifier: TypeAlias = dict[str, str]

REGULAR_MODIFIERS: list[Modifier] = [
    # Hand Bonus Modifiers (Balatro-inspired)
    {
        "name": "Pair Bonus",
        "description": (
            "Any pocket pair: everyone else pays you 1 chip, even if you lose the hand."
        ),
    },
    {
        "name": "Flush Fever",
        "description": (
            "Make a flush: collect 1 chip from each other player "
            "(separate from main pot)."
        ),
    },
    {
        "name": "Straight Shot",
        "description": (
            "Complete a straight: choose one player "
            "to pay you half the current pot size."
        ),
    },
    {
        "name": "Full House Party",
        "description": (
            "Make full house: everyone else pays 2 chips + takes 2 drinks."
        ),
    },
    {
        "name": "High Card Hero",
        "description": (
            "Win with just high card: collect your normal winnings "
            "+ 1 chip from each player."
        ),
    },
    # Card Enhancement Modifiers
    {
        "name": "Face Card Power",
        "description": "All face cards (J, Q, K) count as Aces for this hand.",
    },
    {
        "name": "Red Suit Boost",
        "description": (
            "Hearts and Diamonds are worth +1 rank (Jack becomes Queen, etc.)"
        ),
    },
    {
        "name": "Black Magic",
        "description": (
            "Spades and Clubs can be used as any suit for straights/flushes."
        ),
    },
    {
        "name": "Lucky Sevens",
        "description": "All 7s become wild cards that can be any rank.",
    },
    {
        "name": "Steel Cards",
        "description": (
            "Random rank chosen: {steel_rank}. "
            "All {steel_rank}s beat everything this hand!"
        ),
    },
    # Ante-Based Effects (Clear Money Source)
    {
        "name": "Bonus Pool",
        "description": (
            "Everyone puts 2 chips in bonus pool. "
            "First person to make any pair wins it all."
        ),
    },
    # Deck Manipulation (Balatro-style)
    {
        "name": "Deck Shuffle",
        "description": (
            "After dealing hole cards, shuffle deck and redeal all community cards."
        ),
    },
    {
        "name": "Extra Draw",
        "description": (
            "Deal each player a 3rd hole card. Discard one before the flop."
        ),
    },
    {
        "name": "Phantom Cards",
        "description": (
            "Deal 6 community cards, but randomly remove 1 before showdown."
        ),
    },
    # Special Betting Rules (Realistic Economics)
    {
        "name": "Escalation",
        "description": (
            "Each raise must be at least 2x the previous raise (not just matching)."
        ),
    },
    # Position and Action Modifiers
    {
        "name": "Button Bonus",
        "description": "Dealer button acts last in ALL rounds",
    },
    {
        "name": "Call Penalty",
        "description": (
            "Anyone who only calls (never raises) pays 1 chip penalty to pot."
        ),
    },
    # Information Warfare
    {
        "name": "Poker Face",
        "description": (
            "No talking, no expressions allowed. Pure silent poker this hand."
        ),
    },
    {
        "name": "Truth or Consequences",
        "description": (
            "If asked 'good hand or bad hand?' "
            "you must answer truthfully or pay penalty."
        ),
    },
    {
        "name": "Open Book",
        "description": "Everyone plays with one hole card face-up.",
    },
    # Drinking Game Integration
    {
        "name": "Liquid Courage",
        "description": (
            "Take a drink before betting to get chip bonus to all your bets."
        ),
    },
    {
        "name": "Last Call",
        "description": (
            "Everyone must finish their current drink before the river card."
        ),
    },
    {
        "name": "Shot Clock",
        "description": "5 seconds to act or take a shot and auto-fold.",
    },
    {
        "name": "Drink Tax",
        "description": (
            "Each red card in your final hand = one sip (reveal after play)."
        ),
    },
    # Wild and Chaos Effects
    {
        "name": "Joker's Wild",
        "description": (
            "All Jacks become completely wild - any suit, any rank you choose."
        ),
    },
    {
        "name": "Suit Swap",
        "description": "Hearts become Spades, Diamonds become Clubs this hand.",
    },
    {
        "name": "Rank Revolution",
        "description": "2s beat Aces this hand. All other ranks stay the same.",
    },
    {
        "name": "Time Warp",
        "description": (
            "Play the hand completely backwards: showdown first, "
            "then remove random cards from table!"
        ),
    },
    # Economic Effects (Clear Money Sources)
    {
        "name": "Poverty Mode",
        "description": "All bets limited to 1 chip maximum this hand.",
    },
    {
        "name": "High Roller",
        "description": "Minimum bet is 5x the entry this hand.",
    },
    {
        "name": "Charity Case",
        "description": (
            "Player with fewest chips gets their ante funded by richest player."
        ),
    },
    # Penalty-Based Modifiers (Clear Consequences)
    {
        "name": "Fold Tax",
        "description": "Anyone who folds pays 5 chip to the pot immediately.",
    },
    {
        "name": "Bluff Fine",
        "description": "Get caught bluffing = pay 2 chips to next hand's pot.",
    },
    {
        "name": "Speed Fine",
        "description": ("Take longer than 10 seconds to act = pay 1 chip to pot."),
    },
    {
        "name": "Talk Tax",
        "description": ("Every word spoken during betting costs 1 chip to the pot."),
    },
    # Skill Challenges (With Clear Rewards/Penalties)
    {
        "name": "Memory Challenge",
        "description": (
            "Dealer names all community cards in order. "
            "Success = collect 1 chip from each. "
            "Fail = pay 1 chip to each."
        ),
    },
    {
        "name": "Quick Draw",
        "description": (
            "Everyone pays 1 chip to quick-draw pot. "
            "First to correctly announce their hand wins the pot."
        ),
    },
    {
        "name": "Bluff Bonus",
        "description": (
            "Successfully bluff with 7-high or worse "
            "= collect 2 chips from each other player."
        ),
    },
    {
        "name": "Prediction Pool",
        "description": (
            "Everyone puts 1 chip in pool. Guess the river card exactly = win the pool."
        ),
    },
    # Partnership Modifiers
    {
        "name": "Buddy System",
        "description": (
            "Each player chooses a partner. "
            "Partners share fate - both win or both lose."
        ),
    },
    {
        "name": "Duo Power",
        "description": (
            "Partners can combine their hole cards - "
            "each player plays with 4 cards total."
        ),
    },
    {
        "name": "Shared Vision",
        "description": (
            "Partners can show each other one hole card before betting starts."
        ),
    },
    {
        "name": "Tag Team",
        "description": (
            "Partners alternate who plays each betting round "
            "(pre-flop, flop, turn, river)."
        ),
    },
    {
        "name": "Power Couple",
        "description": (
            "If both partners make it to showdown, they both get +1 chip bonus "
            "from other players (revealed at end of round)."
        ),
    },
]

ENDGAME_MODIFIERS: list[Modifier] = [
    # Classic Endgame Modifiers
    {
        "name": "Final Boss",
        "description": ("This is the last hand. Winner takes all remaining chips."),
    },
    {
        "name": "Sudden Death",
        "description": "Anyone who folds is eliminated from the game.",
    },
    {
        "name": "Comeback Kid",
        "description": (
            "Player with the worst hand can't lose chips this round "
            "(reveal at the end of round)."
        ),
    },
    {
        "name": "Double or Nothing",
        "description": (
            "Winner gets double payout, but everyone else pays double penalty."
        ),
    },
    # High Stakes Endgame
    {
        "name": "All In Madness",
        "description": (
            "Everyone must go all-in. No calling, no folding allowed this hand."
        ),
    },
    {
        "name": "Chip Volcano",
        "description": (
            "Everyone puts half their remaining chips in the center. "
            "Winner takes the mountain."
        ),
    },
    {
        "name": "Last Stand",
        "description": (
            "Player with fewest chips gets to act last in ALL betting rounds."
        ),
    },
    # Dramatic Reversals
    {
        "name": "Underdog Victory",
        "description": ("Worst hand wins the pot instead of best hand this round."),
    },
    # Winner Takes All Variants
    {
        "name": "Crown Jewels",
        "description": (
            "Winner of this hand becomes the 'King' - "
            "all other players pay tribute (2 chips each)."
        ),
    },
    {
        "name": "Championship Belt",
        "description": (
            "Winner takes 75% of all chips on the table. "
            "Remaining 25% goes for the second best."
        ),
    },
    # Elimination Mechanics
    {
        "name": "Battle Royale",
        "description": "Lowest hand is eliminated. If tied, both eliminated.",
    },
    {
        "name": "Survivor",
        "description": (
            "Only players who improve their hand from pre-flop to river "
            "survive to next round."
        ),
    },
    # Time Pressure Endgame
    {
        "name": "Speed Round",
        "description": ("3 seconds to act or auto-fold. No exceptions, no delays."),
    },
    {
        "name": "Auction House",
        "description": (
            "Players bid chips to see each other's hole cards before betting."
        ),
    },
    {
        "name": "Lightning Round",
        "description": (
            "Deal all 5 community cards at once. "
            "Betting happens after each card revealed."
        ),
    },
    # Psychological Warfare
    {
        "name": "Confession Booth",
        "description": (
            "Each player must truthfully state their biggest bluff this session."
        ),
    },
    {
        "name": "Truth Serum",
        "description": (
            "Everyone must honestly rate their hand 1-10 before any betting."
        ),
    },
    {
        "name": "Poker Face Off",
        "description": (
            "Staring contest: losers must reveal one hole card to the table."
        ),
    },
    # Endgame Economics
    {
        "name": "Wealth Redistribution",
        "description": (
            "Before the hand, richest player gives 3 chips to poorest player."
        ),
    },
    {
        "name": "Emergency Fund",
        "description": (
            "All players with less than 5 chips get emergency funding from the pot."
        ),
    },
    {
        "name": "Final Ante",
        "description": (
            "Everyone must put in their last 2 chips "
            "before seeing cards. No backing out."
        ),
    },
    # Apocalypse Modifiers
    {
        "name": "Nuclear Option",
        "description": (
            "Dealer burns the top 3 cards. Play with whatever's left in the deck."
        ),
    },
    {
        "name": "Meteor Strike",
        "description": ("Remove all face cards from the deck for this hand only."),
    },
    {
        "name": "Solar Flare",
        "description": "All suits become the same suit (dealer's choice).",
    },
    # Legacy Modifiers
    {
        "name": "Hall of Fame",
        "description": (
            "Winner's name gets written down as 'Champion of the Session'."
        ),
    },
    {
        "name": "Legendary Hand",
        "description": ("This hand will be retold as a story. Play like legends."),
    },
    {
        "name": "Photo Finish",
        "description": (
            "Take a photo of the winning hand - it goes in the poker hall of fame."
        ),
    },
    # Chaos Theory
    {
        "name": "Butterfly Effect",
        "description": (
            "One random decision by dealer changes everything: "
            "flip a coin for each community card to reverse it."
        ),
    },
    {
        "name": "Time Paradox",
        "description": (
            "Play the hand twice with same cards. Best average result wins."
        ),
    },
    {
        "name": "Multiverse",
        "description": (
            "Deal 2 separate boards. Players choose "
            "which board to play after seeing both."
        ),
    },
]
