from abc import ABC, abstractmethod
from ..messages import actions, game_updates, message_protocol
from . import PlayerId
from .. import Value

class PlayerActions(ABC):
    @abstractmethod
    def _draw_or_trade(self) -> actions.PlayerTurnDecision: ...
    @abstractmethod
    def _trade(self) -> actions.InitialTrade: ...
    @abstractmethod
    def _provide_bidding(self, state: game_updates.AuctionRound) -> actions.Bidding: ...
    @abstractmethod
    def _buy_or_sell(
        self, state: game_updates.AuctionRound
    ) -> actions.AuctionDecision: ...
    @abstractmethod
    def _send_money_to_player(
        self, player: PlayerId, amount: Value
    ) -> actions.SendMoney: ...
    @abstractmethod
    def _respond_to_trade(
        self, offer: game_updates.TradeOffer
    ) -> actions.TradeOpponentDecision: ...
    @abstractmethod
    def _receive_game_update(
        self, update: game_updates.GameUpdate
    ) -> actions.NoAction: ...
