from dataclasses import  dataclass
from enum import Enum, auto
from abc import ABC

class EffectCondition(Enum):
    ATTACKING_MONSTER = auto()
    ROLLING_FOR_HERO = auto()
    PLAYING_MAGIC = auto()
    ROLLING_FOR_CHALLANGE = auto()
    PLAYING_MODIFIER = auto()
    RECEIVING_MODIFIER = auto()
    ANY_MODIFIER_PLAYED = auto()
    HERO_LANDS = auto()
    HERO_PULLED = auto()

class EffectType(Enum):
    MODIFY_ROLL = auto()
    DRAW_CARD = auto()
    STEAL_FROM_CHOSEN_HAND = auto()
    STEAL_FROM_CHOSEN_PARTY = auto()
    SACRIFICE_CHOSEN_HERO = auto()
    DESTROY_CHOSEN_HERO = auto()
    DISCARD_CHOSEN_CARD = auto()
    SLAY_MONSTER = auto()
    INSPECT_CHOSEN_HAND = auto()
    DISCARD_ALL_CARDS = auto()
    DRAW_CARDS_UNTIL = auto()
    PLAY_IMMEDIATLY = auto()

class CardType(Enum):
    MONSTER = "monster"
    HERO = "hero"
    ITEM = "item"

class HeroClass(Enum):
    FIGHTER = "fighter"
    GUARDIAN = "guardian"
    RANGER = "ranger"
    THIEF = "thief"
    WIZARD = "wizard"
    BARD = "bard"

@dataclass
class Ability:
    name: str
    land_requirement: int
    miss_requirement: int
    lands_on_low_value: bool

@dataclass
class Card:
    name: str
    class_type: CardType | HeroClass
    ability: Ability
    is_leader: bool