from enum import Enum
from ..player import PlayerId
from ..animals import Animal
from .. import Money, Value
from dataclasses import dataclass
from typing import Union



class NoAction: ...
class Ok(NoAction): ...



class Draw:
    def __init__(self) -> None: ...

class Trade:
    data: InitialTrade
    def __init__(self, data: InitialTrade) -> None: ...

class InitialTrade:
    opponent: PlayerId
    animal: Animal
    animal_count: int
    amount: list[Money]

class PlayerTurnDecision:
    
    @staticmethod
    def Draw() -> PlayerTurnDecision: ...

    @staticmethod
    def Trade(initial_trade: InitialTrade) -> PlayerTurnDecision: ... 


class Buy:
    def __init__(self) -> None: ...

class Sell:
    def __init__(self) -> None: ...

class AuctionDecision:
    class Buy(AuctionDecision): ...
    class Sell(AuctionDecision): ...


class Accept:
    def __init__(self) -> None: ...

class CounterOffer:
    data: list[Money]
    def __init__(self, data: list[Money]) -> None: ...

class TradeOpponentDecision:
    class Accept(TradeOpponentDecision): ...
    class CounterOffer(TradeOpponentDecision):
        def __init__(self, data: list[Money]) -> None: ...


class WasBluff:
    def __init__(self) -> None: ...

class Amount:
    data: list[Money]
    def __init__(self, data: list[Money]) -> None: ...

SendMoney = Union[WasBluff, Amount]


class Pass:
    def __init__(self) -> None: ...

class Bid:
    data: Value
    def __init__(self, data: Value) -> None: ...

Bidding = Union[Pass, Bid]
