from typing import TYPE_CHECKING, Union

import discord
from discord.ext.commands import BadArgument, Converter
from redbot.core import commands

from werewolf.player import Player

if TYPE_CHECKING:
    PlayerConverter = Union[int, discord.Member]
    CronConverter = str
else:

    class PlayerConverter(Converter):
        async def convert(self, ctx, argument) -> Player:

            try:
                target = await commands.MemberConverter().convert(ctx, argument)
            except BadArgument:
                try:
                    target = int(argument)
                    assert target >= 0
                except (ValueError, AssertionError):
                    raise BadArgument

            # TODO: Get the game for context without making a new one
            # TODO: Get player from game based on either ID or member object
            return target
