"""Game options for Mile by Mile."""

from dataclasses import dataclass

from ..base import GameOptions
from ...game_utils.options import (
    IntOption,
    MenuOption,
    BoolOption,
    TeamModeOption,
    option_field,
)
from ...game_utils.teams import TeamManager


@dataclass
class MileByMileOptions(GameOptions):
    """Options for Mile by Mile game."""

    round_distance: int = option_field(
        IntOption(
            default=1000,
            min_val=300,
            max_val=3000,
            value_key="miles",
            label="milebymile-set-distance",
            prompt="milebymile-enter-distance",
            change_msg="milebymile-option-changed-distance",
            description="milebymile-desc-round-distance",
        )
    )
    winning_score: int = option_field(
        IntOption(
            default=5000,
            min_val=1000,
            max_val=10000,
            value_key="score",
            label="milebymile-set-winning-score",
            prompt="milebymile-enter-winning-score",
            change_msg="milebymile-option-changed-winning",
            description="milebymile-desc-winning-score",
        )
    )
    team_mode: str = option_field(
        TeamModeOption(
            default="individual",
            value_key="mode",
            choices=lambda g, p: TeamManager.get_all_team_modes(2, 9),
            label="game-set-team-mode",
            prompt="game-select-team-mode",
            change_msg="game-option-changed-team",
        )
    )
    only_allow_perfect_crossing: bool = option_field(
        BoolOption(
            default=True,
            value_key="enabled",
            label="milebymile-toggle-perfect-crossing",
            change_msg="milebymile-option-changed-crossing",
            description="milebymile-desc-perfect-crossing",
        )
    )
    allow_stacking_attacks: bool = option_field(
        BoolOption(
            default=False,
            value_key="enabled",
            label="milebymile-toggle-stacking",
            change_msg="milebymile-option-changed-stacking",
            description="milebymile-desc-stacking",
        )
    )
    reshuffle_discard_pile: bool = option_field(
        BoolOption(
            default=True,
            value_key="enabled",
            label="milebymile-toggle-reshuffle",
            change_msg="milebymile-option-changed-reshuffle",
            description="milebymile-desc-reshuffle",
        )
    )
    karma_rule: bool = option_field(
        BoolOption(
            default=False,
            value_key="enabled",
            label="milebymile-toggle-karma",
            change_msg="milebymile-option-changed-karma",
            description="milebymile-desc-karma",
        )
    )
    rig_game: str = option_field(
        MenuOption(
            default="None",
            value_key="rig",
            choices=["None", "No Duplicates", "2x Attacks", "2x Defenses"],
            label="milebymile-set-rig",
            prompt="milebymile-select-rig",
            change_msg="milebymile-option-changed-rig",
            description="milebymile-desc-rig",
        )
    )
    always_allow_discarding: bool = option_field(
        BoolOption(
            default=True,
            value_key="enabled",
            label="milebymile-toggle-always-discard",
            change_msg="milebymile-option-changed-always-discard",
            description="milebymile-desc-always-discard",
        )
    )
